def _notification(self): while self._running: try: message_length = yield self._stream.read_bytes(2) length = struct.unpack("!H", message_length)[0] message = yield self._stream.read_bytes(length) request = Message.unpack(message) handler = self.notification_handler(request, self) handler.process_request() except OSError as e: print_(e) self.stop() except Exception as e: print_(e) self.stop()
def dispatch_client(self): try: while True: # Считать длинну сообщения message_length = yield self._stream.read_bytes(2) # Распоковать length = struct.unpack("!H", message_length)[0] # Считать сообщение message = yield self._stream.read_bytes(length) # Распоковать запрос request = Message.unpack(message=message) # Создать обработчик запросов handler = self._handler(request, self._id, self._storage) # Обработать запрос response = yield handler.process_request() # Вернуть ответ if response: response = Message(response[0], kwargs=response[1]) yield self._stream.write(response.pack()) except iostream.StreamClosedError: pass
def test_unpack(self): message = b"LOGIN\ngAN9cQBYCAAAAHVzZXJuYW1lcQFYBAAAAHRlc3RxAnMu" r = Message.unpack(message) self.assertEqual(r.command, "LOGIN") self.assertIsInstance(r.kwargs, dict) self.assertDictEqual(r.kwargs, {'username': "******"})