add routing fields to mesh messages
This commit is contained in:
parent
683f80ef75
commit
e7a4effc99
2 changed files with 14 additions and 4 deletions
|
@ -5,9 +5,11 @@ from c3nav.mesh import messages
|
|||
|
||||
class MeshConsumer(AsyncWebsocketConsumer):
|
||||
async def connect(self):
|
||||
print('connected!')
|
||||
await self.accept()
|
||||
|
||||
async def disconnect(self, close_code):
|
||||
print('disconnected!')
|
||||
pass
|
||||
|
||||
async def receive(self, text_data=None, bytes_data=None):
|
||||
|
@ -16,4 +18,8 @@ class MeshConsumer(AsyncWebsocketConsumer):
|
|||
msg = messages.Message.decode(bytes_data)
|
||||
print('Received message:', msg)
|
||||
if isinstance(msg, messages.MeshSigninMessage):
|
||||
await self.send(messages.MeshLayerAnnounceMessage(messages.NO_LAYER).encode())
|
||||
await self.send(bytes_data=messages.MeshLayerAnnounceMessage(
|
||||
src='00:00:00:00:00:00',
|
||||
dst=msg.src,
|
||||
layer=messages.NO_LAYER
|
||||
).encode())
|
||||
|
|
|
@ -46,6 +46,9 @@ class MacAddressesListFormat:
|
|||
|
||||
@dataclass
|
||||
class Message:
|
||||
dst: str = field(metadata={'format': MacAddressFormat()})
|
||||
src: str = field(metadata={'format': MacAddressFormat()})
|
||||
msg_id: int = field(metadata={'format': SimpleFormat('B')}, init=False)
|
||||
msg_types = {}
|
||||
|
||||
# noinspection PyMethodOverriding
|
||||
|
@ -56,18 +59,19 @@ class Message:
|
|||
Message.msg_types[msg_id] = cls
|
||||
|
||||
def encode(self):
|
||||
data = bytes((self.msg_id, ))
|
||||
data = bytes()
|
||||
for field_ in fields(self):
|
||||
data += field_.metadata['format'].encode(getattr(self, field_.name))
|
||||
return data
|
||||
|
||||
@classmethod
|
||||
def decode(cls, data: bytes):
|
||||
klass = cls.msg_types[data[0]]
|
||||
data = data[1:]
|
||||
print('decode', ' '.join(('%02x' % i) for i in data))
|
||||
klass = cls.msg_types[data[12]]
|
||||
values = {}
|
||||
for field_ in fields(klass):
|
||||
values[field_.name], data = field_.metadata['format'].decode(data)
|
||||
values.pop('msg_id')
|
||||
return klass(**values)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue