connect_manager.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from models import WebSocket
  2. from logger import logger
  3. import json
  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):
  10. """json字符串数据"""
  11. jsonData = {"code": code, "msg": msg, "data": data}
  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. print("ready message successfully")
  26. await websocket.send_json(message)
  27. print("sent message successfully")
  28. async def broadcast(self, message: str):
  29. """广播消息"""
  30. for connection in self.active_connections:
  31. if connection.client_state == WebSocketState.DISCONNECTED:
  32. continue
  33. print("connection", connection.client_state)
  34. await connection.send_json(message)