message_receiver.py 1000 B

1234567891011121314151617181920212223242526272829303132
  1. from .message import message
  2. from .message_decoder import message_decoder
  3. class message_receiver:
  4. def __init__(self) -> None:
  5. self.__types = dict()
  6. def register(self, target: type) -> object:
  7. if not issubclass(target, message):
  8. raise RuntimeError("Can not register type which is not message.")
  9. if not target.get_type() in self.__types.keys():
  10. self.__types[target.get_type()] = target
  11. return self
  12. if self.__types[target.get_type()] != target:
  13. raise RuntimeError("That ID already own by other message.")
  14. return self
  15. self.__types[target.get_type()] = target
  16. return self
  17. def receive(self, content: bytes) -> message:
  18. decoder = message_decoder(content)
  19. type_id = decoder.extract_type()
  20. if type_id in self.__types:
  21. return decoder.build(self.__types[type_id])
  22. raise RuntimeError("Can nof find message type ID in registered.")