Initial commit
This commit is contained in:
75
skills/skill-adapter/assets/template_native_ws.py
Normal file
75
skills/skill-adapter/assets/template_native_ws.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
Template for a basic WebSocket server using native WebSockets.
|
||||
|
||||
This script provides a foundation for building real-time bidirectional
|
||||
communication applications using Python's built-in `websockets` library.
|
||||
It includes basic connection handling, message reception, and sending.
|
||||
|
||||
Example usage:
|
||||
1. Install the `websockets` library: `pip install websockets`
|
||||
2. Run the script: `python template_native_ws.py`
|
||||
3. Connect to the server using a WebSocket client (e.g., a browser-based client).
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import websockets
|
||||
import logging
|
||||
|
||||
# Configure logging
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
|
||||
async def handle_client(websocket, path):
|
||||
"""
|
||||
Handles a single WebSocket client connection.
|
||||
|
||||
Args:
|
||||
websocket: The WebSocket connection object.
|
||||
path: The path requested by the client (unused in this example).
|
||||
"""
|
||||
try:
|
||||
logging.info(f"Client connected from {websocket.remote_address}")
|
||||
async for message in websocket:
|
||||
logging.info(f"Received message: {message}")
|
||||
try:
|
||||
# Process the message (replace with your application logic)
|
||||
response = f"Server received: {message}"
|
||||
await websocket.send(response)
|
||||
logging.info(f"Sent message: {response}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error processing message: {e}")
|
||||
await websocket.send(f"Error: {e}")
|
||||
|
||||
except websockets.exceptions.ConnectionClosedError as e:
|
||||
logging.info(f"Client disconnected abruptly: {e}")
|
||||
except websockets.exceptions.ConnectionClosedOK as e:
|
||||
logging.info(f"Client disconnected gracefully: {e}")
|
||||
except Exception as e:
|
||||
logging.error(f"Error handling client: {e}")
|
||||
finally:
|
||||
logging.info(f"Connection with {websocket.remote_address} closed.")
|
||||
|
||||
|
||||
async def main():
|
||||
"""
|
||||
Starts the WebSocket server.
|
||||
"""
|
||||
try:
|
||||
server = await websockets.serve(handle_client, "localhost", 8765)
|
||||
logging.info("WebSocket server started on ws://localhost:8765")
|
||||
await server.wait_closed()
|
||||
except OSError as e:
|
||||
logging.error(f"Could not start server: {e}")
|
||||
except Exception as e:
|
||||
logging.error(f"Unexpected error: {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
asyncio.run(main())
|
||||
except KeyboardInterrupt:
|
||||
logging.info("Server stopped by keyboard interrupt.")
|
||||
except Exception as e:
|
||||
logging.error(f"Unhandled exception during server startup: {e}")
|
||||
Reference in New Issue
Block a user