optimization / backend /src /main.py
joel-woodfield's picture
Try using user 1000
1ff744b
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.staticfiles import StaticFiles
from optimization_manager import OptimizationManager
app = FastAPI()
PORT = 7860
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
print("starting")
await websocket.accept()
manager = OptimizationManager()
try:
while True:
# Receive message from client
message = await websocket.receive_json()
message_type = message.get("type")
# Handle different message types
if message_type == "init":
await handle_init(websocket, manager, message.get("settings", {}))
elif message_type == "reset":
await handle_reset(websocket, manager)
elif message_type == "next-step":
await handle_next_step(websocket, manager)
elif message_type == "prev-step":
await handle_prev_step(websocket, manager)
elif message_type == "play":
await handle_play(websocket, manager)
elif message_type == "pause":
await handle_pause(websocket, manager)
else:
await send_error(websocket, f"Unknown message type: {message_type}")
except WebSocketDisconnect:
print("Client disconnected")
except Exception as e:
print(f"Error: {e}")
await send_error(websocket, str(e))
async def handle_init(websocket: WebSocket, manager: OptimizationManager, settings: dict):
"""Handle settings update."""
data = manager.handle_update_settings(settings)
if data:
await websocket.send_json(data)
async def handle_reset(websocket: WebSocket, manager: OptimizationManager):
"""Handle trajectory reset."""
data = manager.handle_reset()
if data:
await websocket.send_json(data)
async def handle_next_step(websocket: WebSocket, manager: OptimizationManager):
"""Handle next step request."""
data = manager.handle_next_step()
if data:
await websocket.send_json(data)
async def handle_prev_step(websocket: WebSocket, manager: OptimizationManager):
"""Handle previous step request."""
data = manager.handle_prev_step()
if data:
await websocket.send_json(data)
async def handle_play(websocket: WebSocket, manager: OptimizationManager):
"""Handle play request (to be implemented)."""
# TODO: Implement play functionality with automatic step advancement
pass
async def handle_pause(websocket: WebSocket, manager: OptimizationManager):
"""Handle pause request (to be implemented)."""
# TODO: Implement pause functionality
pass
async def send_error(websocket: WebSocket, error_message: str):
"""Send error message to client."""
await websocket.send_json({
"type": "error",
"message": error_message
})
app.mount("/", StaticFiles(directory="../frontend/dist", html=True), name="frontend")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=PORT)