framework/examples/website/CONSOLE_API.md
2025-07-21 00:17:46 +02:00

267 lines
6.6 KiB
Markdown

# WebSocket Manager Console API Documentation
The WebSocket Manager provides a browser console interface for interactive testing and debugging of WebSocket connections. When the application loads, the manager is automatically exposed to the global `window` object.
## Quick Start
Open your browser's developer console and you'll see initialization messages:
```
🚀 WebSocket Manager exposed to console!
📖 Use 'wsHelp' to see available commands
🔧 Access manager via 'wsManager'
```
## Global Objects
### `wsManager`
The main WebSocket manager instance with all functionality.
### `wsHelp`
Quick reference object containing usage examples for all commands.
## API Reference
### Connection Status
#### `wsManager.getServerUrls()`
Returns an array of all configured server URLs.
**Returns:** `Array<string>`
**Example:**
```javascript
wsManager.getServerUrls()
// Returns: ["ws://localhost:8080", "ws://localhost:8081", "ws://localhost:8443/ws"]
```
#### `wsManager.getConnectionStatuses()`
Returns an object mapping each server URL to its current connection status.
**Returns:** `Object<string, string>`
**Possible Status Values:**
- `"Connected"` - WebSocket is connected and ready
- `"Disconnected"` - WebSocket is not connected
**Example:**
```javascript
wsManager.getConnectionStatuses()
// Returns: {
// "ws://localhost:8080": "Disconnected",
// "ws://localhost:8081": "Disconnected",
// "ws://localhost:8443/ws": "Connected"
// }
```
#### `wsManager.isConnected(url)`
Check if a specific server is connected.
**Parameters:**
- `url` (string) - The WebSocket server URL to check
**Returns:** `boolean`
**Example:**
```javascript
wsManager.isConnected('ws://localhost:8443/ws')
// Returns: true or false
```
#### `wsManager.getConnectionCount()`
Get the total number of configured servers (not necessarily connected).
**Returns:** `number`
**Example:**
```javascript
wsManager.getConnectionCount()
// Returns: 3
```
### Script Execution
#### `wsManager.executeScript(url, script)`
Execute a Rhai script on a specific connected server.
**Parameters:**
- `url` (string) - The WebSocket server URL
- `script` (string) - The Rhai script to execute
**Returns:** `Promise<string>` - Resolves with script output or rejects with error
**Example:**
```javascript
// Simple calculation
await wsManager.executeScript('ws://localhost:8443/ws', 'let x = 42; `Result: ${x}`')
// Get current timestamp
await wsManager.executeScript('ws://localhost:8443/ws', '`Current time: ${new Date().toISOString()}`')
// JSON response
await wsManager.executeScript('ws://localhost:8443/ws', `
let data = #{
message: "Hello from WebSocket!",
value: 42,
timestamp: new Date().toISOString()
};
to_json(data)
`)
```
#### `wsManager.executeScriptOnAll(script)`
Execute a Rhai script on all connected servers simultaneously.
**Parameters:**
- `script` (string) - The Rhai script to execute
**Returns:** `Promise<Object>` - Object mapping URLs to their results
**Example:**
```javascript
// Get server info from all connected servers
const results = await wsManager.executeScriptOnAll('`Server response from: ${new Date().toISOString()}`')
console.log(results)
// Returns: {
// "ws://localhost:8443/ws": "Server response from: 2025-01-16T14:30:00.000Z",
// "ws://localhost:8080": "Error: Connection failed",
// "ws://localhost:8081": "Error: Connection failed"
// }
```
### Connection Management
#### `wsManager.reconnect()`
Attempt to reconnect to all configured servers.
**Returns:** `Promise<string>` - Success or error message
**Example:**
```javascript
await wsManager.reconnect()
// Console output: "Reconnected to servers"
```
## Rhai Script Examples
The WebSocket servers execute [Rhai](https://rhai.rs/) scripts. Here are some useful examples:
### Basic Operations
```javascript
// Simple calculation
await wsManager.executeScript(url, 'let result = 2 + 2; `2 + 2 = ${result}`')
// String manipulation
await wsManager.executeScript(url, 'let msg = "Hello"; `${msg.to_upper()} WORLD!`')
// Current timestamp
await wsManager.executeScript(url, '`Current time: ${new Date().toISOString()}`')
```
### JSON Data
```javascript
// Create and return JSON
await wsManager.executeScript(url, `
let data = #{
id: 123,
name: "Test User",
active: true,
created: new Date().toISOString()
};
to_json(data)
`)
```
### Conditional Logic
```javascript
// Conditional responses
await wsManager.executeScript(url, `
let hour = new Date().getHours();
if hour < 12 {
"Good morning!"
} else if hour < 18 {
"Good afternoon!"
} else {
"Good evening!"
}
`)
```
### Loops and Arrays
```javascript
// Generate data with loops
await wsManager.executeScript(url, `
let numbers = [];
for i in 1..6 {
numbers.push(i * i);
}
\`Squares: \${numbers}\`
`)
```
## Error Handling
All async operations return Promises that can be caught:
```javascript
try {
const result = await wsManager.executeScript('ws://localhost:8080', 'let x = 42; x');
console.log('Success:', result);
} catch (error) {
console.error('Script failed:', error);
}
```
Common error scenarios:
- **Connection Error**: Server is not connected
- **Script Error**: Invalid Rhai syntax or runtime error
- **Timeout**: Script execution took too long
- **Network Error**: WebSocket connection lost
## Console Logging
The manager automatically logs important events to the console:
-**Success messages**: Script execution completed
-**Error messages**: Connection failures, script errors
- 🔄 **Status updates**: Reconnection attempts
- 📡 **Network events**: WebSocket state changes
## Development Tips
1. **Check Connection Status First**:
```javascript
wsManager.getConnectionStatuses()
```
2. **Test Simple Scripts First**:
```javascript
await wsManager.executeScript(url, '"Hello World"')
```
3. **Use Template Literals for Complex Scripts**:
```javascript
const script = `
let data = #{
timestamp: new Date().toISOString(),
random: Math.random()
};
to_json(data)
`;
await wsManager.executeScript(url, script)
```
4. **Monitor Console for Detailed Logs**:
The manager provides detailed logging for debugging connection and execution issues.
## Integration with UI
The console API shares the same WebSocket manager instance as the web UI, so:
- Connection status changes are reflected in both
- Scripts executed via console appear in the UI responses
- Authentication state is shared between console and UI
This makes the console API perfect for:
- **Development**: Quick script testing
- **Debugging**: Connection troubleshooting
- **Automation**: Batch operations
- **Learning**: Exploring Rhai script capabilities