socket_server.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import json
  2. import asyncio
  3. from models import *
  4. from .connect_manager import ConnectionManager
  5. from .message_handler import *
  6. from mcu.DeviceControl import DeviceControl,checkMcuConnection
  7. from mcu.BlueToothMode import BlueToothMode
  8. from mcu.RemoteControlV2 import RemoteControlV2
  9. import time
  10. from .socket_client import socket_manager
  11. conn_manager = ConnectionManager()
  12. active_connections = set()
  13. device_ctrl = DeviceControl(websocket_manager=conn_manager)
  14. blue_tooth = BlueToothMode(websocket_manager=conn_manager)
  15. from utils.common import message_queue
  16. @app.websocket("/ws")
  17. async def websocket_endpoint(websocket: WebSocket):
  18. await conn_manager.connect(websocket)
  19. active_connections.add(websocket)
  20. try:
  21. # await socket_manager.connect()
  22. async def handler_messages():
  23. while True:
  24. try:
  25. byteDats = await websocket.receive()
  26. byteDats.get("type")
  27. print("byteDats", byteDats)
  28. await handlerSend(conn_manager, json.dumps(byteDats), websocket)
  29. except Exception as e:
  30. print(e)
  31. break
  32. async def checkConnMcu():
  33. await checkMcuConnection(device_ctrl)
  34. async def connectBlueTooth():
  35. await blue_tooth.main_func()
  36. async def send_message():
  37. while True:
  38. try:
  39. message = await message_queue.get()
  40. await websocket.send_text(message)
  41. except Exception as e:
  42. print(e)
  43. break
  44. await asyncio.gather(handler_messages(), checkConnMcu(), connectBlueTooth(), send_message())
  45. except WebSocketDisconnect:
  46. # socket_manager.close()
  47. print("Client disconnected")
  48. finally:
  49. active_connections.discard(websocket)
  50. # if websocket:
  51. # await websocket.close()
  52. @app.on_event("shutdown")
  53. async def shutdown_event():
  54. print("Shutting down...")
  55. # socket_manager.close()
  56. # 清理操作
  57. for connection in list(active_connections):
  58. try:
  59. await connection.close()
  60. except Exception as e:
  61. print(f"Error closing connection: {e}")