connect_manager.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from models import WebSocket
  2. from logger import logger
  3. import json, asyncio
  4. from starlette.websockets import WebSocketState
  5. class ConnectionManager:
  6. is_connected = False
  7. def __init__(self):
  8. self.active_connections: list[WebSocket] = []
  9. def jsonMessage(self, code=0, msg="", data: object = None,msg_type=""):
  10. """json字符串数据"""
  11. jsonData = {"code": code, "msg": msg, "data": data, "msg_type": msg_type}
  12. return jsonData
  13. async def connect(self, websocket: WebSocket):
  14. '''连接事件'''
  15. await websocket.accept()
  16. self.is_connected = True
  17. self.active_connections.append(websocket)
  18. logger.info("socket 已连接")
  19. def disconnect(self, websocket: WebSocket):
  20. '''断开连接事件'''
  21. self.active_connections.remove(websocket)
  22. logger.info("socket 连接断开")
  23. async def send_personal_message(self, message: str, websocket: WebSocket):
  24. '''向用户发送消息'''
  25. # await websocket.send_json(message)
  26. try:
  27. await websocket.send_json(message)
  28. except Exception as e:
  29. logger.info(f"socket 消息发送异常:{str(e)}")
  30. await asyncio.sleep(0.001)
  31. async def broadcast(self, message: str):
  32. """广播消息"""
  33. for connection in self.active_connections:
  34. if connection.client_state == WebSocketState.DISCONNECTED:
  35. continue
  36. print("正在发送广播消息", "message", connection.client_state)
  37. await connection.send_json(message)