from fastapi import APIRouter, WebSocket, WebSocketDisconnect
from app.api.dependencies import ServiceContainer
import json
def create_workspace_router(services: ServiceContainer) -> APIRouter:
router = APIRouter()
@router.websocket("/ws/workspace/{session_id}")
async def websocket_endpoint(websocket: WebSocket, session_id: str):
await websocket.accept()
print(f"WebSocket connection accepted for session: {session_id}")
# Send a welcome message to confirm the connection is active
await websocket.send_text(json.dumps({
"type": "connection_established",
"message": f"Connected to AI Hub. Session ID: {session_id}"
}))
try:
await websocket.send_text(json.dumps({
"type": "connection_established",
"message": f"Connected to AI Hub. Session ID: {session_id}"
}))
while True:
message = await websocket.receive_text()
data = json.loads(message)
# The endpoint's only job is to dispatch the message to the service
await services.workspace_service.dispatch_message(websocket, data)
except WebSocketDisconnect:
print(f"WebSocket connection disconnected for session: {session_id}")
except Exception as e:
print(f"An error occurred: {e}")
finally:
print(f"Closing WebSocket for session: {session_id}")
return router