socket_server.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. import time
  9. from .socket_client import socket_manager
  10. conn_manager = ConnectionManager()
  11. active_connections = set()
  12. device_ctrl = DeviceControl(websocket_manager=conn_manager)
  13. blue_tooth = BlueToothMode(websocket_manager=conn_manager)
  14. from utils.common import message_queue
  15. @app.websocket("/ws")
  16. async def websocket_endpoint(websocket: WebSocket):
  17. await conn_manager.connect(websocket)
  18. active_connections.add(websocket)
  19. try:
  20. # await socket_manager.connect()
  21. async def handler_messages():
  22. while True:
  23. try:
  24. byteDats = await websocket.receive()
  25. socket_type = byteDats.get("type")
  26. if socket_type == "websocket.disconnect":
  27. device_ctrl.close_connect()
  28. device_ctrl.mcu_exit = True
  29. device_ctrl.p_list = []
  30. device_ctrl.temp_ports_dict = {}
  31. device_ctrl.clearMyInstance()
  32. diviceList = blue_tooth.devices
  33. if len(diviceList) == 0:
  34. blue_tooth.bluetooth_exit = True
  35. blue_tooth.clearMyInstance()
  36. break
  37. diviceAddress = list(diviceList.keys())[0]
  38. if diviceAddress != "":
  39. print(diviceList.get(diviceAddress))
  40. diviceName = diviceList[diviceAddress]["name"]
  41. blue_tooth.disconnect_device(diviceAddress, diviceName)
  42. blue_tooth.bluetooth_exit = True
  43. blue_tooth.clearMyInstance()
  44. break
  45. print("byteDats", byteDats)
  46. await handlerSend(conn_manager, json.dumps(byteDats), websocket)
  47. except Exception as e:
  48. print(e)
  49. break
  50. # async def checkConnMcu():
  51. # await checkMcuConnection(device_ctrl)
  52. # async def connectBlueTooth():
  53. # await blue_tooth.main_func()
  54. async def send_message():
  55. while True:
  56. try:
  57. message = await message_queue.get()
  58. await websocket.send_json(message)
  59. except Exception as e:
  60. print(e)
  61. break
  62. await asyncio.gather(handler_messages(), send_message())
  63. except WebSocketDisconnect:
  64. # socket_manager.close()
  65. print("Client disconnected")
  66. finally:
  67. active_connections.discard(websocket)
  68. # if websocket:
  69. # await websocket.close()
  70. @app.on_event("shutdown")
  71. async def shutdown_event():
  72. print("Shutting down...")
  73. # socket_manager.close()
  74. # 清理操作
  75. for connection in list(active_connections):
  76. try:
  77. await connection.close()
  78. except Exception as e:
  79. print(f"Error closing connection: {e}")