async def __task_writer(self, ws:websockets.WebSocketClientProtocol)->None: self.logger.debug("[writer] Started") while not ws.closed: # Ждем сообщение flag,msg = await wait_first([ self.__qsend.get(), ws.wait_closed(), self.__estop.wait() ]) if not flag: break # Передаем сообщение await ws.send(msg) self.logger.debug("[writer] Stopped")
async def __task_reader(self, ws:websockets.WebSocketClientProtocol, queue:asyncio.Queue)->None: self.logger.debug("[reader] Started") while not ws.closed: # Ждем сообщение flag,args = await wait_first([ ws.recv(), ws.wait_closed(), self.__estop.wait() ]) if not flag: break # Обрабатываем сообщение try: await self.on_recv(args, queue) except Exception as e: self.logger.warn(f"[reader] on_recv() failed: <{type(e).__name__}> {e}, flag: {flag}, args: {args}") # Закрываем подключение if not ws.closed: self.logger.info("[reader] Close connection") await ws.close() # Журнал self.logger.debug("[reader] Stopped")