def __init__(self, room_id, on_message, on_broken): self.room_id = room_id self.on_message = on_message self.on_broken = on_broken self.session = None self.task = None self.task_heartbeat = None self._url = WsApi.BILI_WS_URI self._join_pkg = WsApi.gen_join_room_pkg(room_id=self.room_id) self._hb_pkg = WsApi.gen_heart_beat_pkg() self._connect_times = 0 self._reconnect_time = 0
async def listen_ws(index: int, area_id: int, room_id: int): is_preparing = False session = aiohttp.ClientSession() async with session.ws_connect(url=DANMAKU_WS_URL) as ws: await ws.send_bytes(WsApi.gen_join_room_pkg(room_id=room_id)) ws.monitor_room_id = room_id ws.area_id = area_id ALL_WS_CLIENTS.add(ws) async for msg in ws: if msg.type == aiohttp.WSMsgType.ERROR: break is_preparing = await proc_danmaku(area_id, room_id, msg.data) if is_preparing is True: break ALL_WS_CLIENTS.remove(ws) logging.info(f"Client closed. {index}-{area_id} -> {room_id}, " f"By danmaku preparing: {is_preparing}")
async def on_connect(ws): logging.info("connected.") await ws.send(WsApi.gen_join_room_pkg(MONITOR_ROOM_ID))
async def on_connect(ws): await ws.send(WsApi.gen_join_room_pkg(room_id))
async def on_connect(ws): print(f"on_connect: {ws}") await ws.send(WsApi.gen_join_room_pkg(room_id))