message.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from .field import field
  2. from .message_coder import message_coder
  3. from .message_encoder import message_encoder
  4. class message:
  5. _type = None
  6. def __init__(self) -> None:
  7. self.__fields = list()
  8. if self._type is None:
  9. raise RuntimeError("Message type can not being None.")
  10. @classmethod
  11. def get_type(cls) -> int:
  12. return cls._type
  13. @property
  14. def fields(self) -> tuple:
  15. return tuple(self.__fields)
  16. def _add_field(self, target: field) -> None:
  17. if target in self.__fields:
  18. return
  19. self.__fields.append(target)
  20. title = target.title
  21. setter = lambda content: target.set(content)
  22. getter = lambda : target.get()
  23. setattr(self, "set_" + title, setter)
  24. setattr(self, "get_" + title, getter)
  25. @property
  26. def size(self) -> int:
  27. result = 0
  28. for count in self.__fields:
  29. result += count.size
  30. return result
  31. def __len__(self) -> int:
  32. return self.size
  33. def encoder(self) -> message_encoder:
  34. return message_encoder(self)