rename Message → MeshMessage
This commit is contained in:
parent
21b75bec86
commit
c5ac3ceb76
6 changed files with 34 additions and 34 deletions
|
@ -20,7 +20,7 @@ from c3nav.mapdata.forms import I18nModelFormMixin
|
||||||
from c3nav.mapdata.models import MapUpdate, Space
|
from c3nav.mapdata.models import MapUpdate, Space
|
||||||
from c3nav.mapdata.models.access import (AccessPermission, AccessPermissionToken, AccessPermissionTokenItem,
|
from c3nav.mapdata.models.access import (AccessPermission, AccessPermissionToken, AccessPermissionTokenItem,
|
||||||
AccessRestriction, AccessRestrictionGroup)
|
AccessRestriction, AccessRestrictionGroup)
|
||||||
from c3nav.mesh.messages import MessageType
|
from c3nav.mesh.messages import MeshMessageType
|
||||||
from c3nav.mesh.models import MeshNode
|
from c3nav.mesh.models import MeshNode
|
||||||
from c3nav.site.models import Announcement
|
from c3nav.site.models import Announcement
|
||||||
|
|
||||||
|
@ -302,7 +302,7 @@ class MapUpdateForm(ModelForm):
|
||||||
|
|
||||||
class MeshMessageFilterForm(Form):
|
class MeshMessageFilterForm(Form):
|
||||||
message_types = MultipleChoiceField(
|
message_types = MultipleChoiceField(
|
||||||
choices=[(msgtype.value, msgtype.name) for msgtype in MessageType],
|
choices=[(msgtype.value, msgtype.name) for msgtype in MeshMessageType],
|
||||||
required=False,
|
required=False,
|
||||||
label=_('message types'),
|
label=_('message types'),
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,7 +8,7 @@ from django.views.generic import ListView, DetailView, FormView
|
||||||
from c3nav.control.forms import MeshMessageFilterForm
|
from c3nav.control.forms import MeshMessageFilterForm
|
||||||
from c3nav.control.views.base import ControlPanelMixin
|
from c3nav.control.views.base import ControlPanelMixin
|
||||||
from c3nav.mesh.forms import MeshMessageForm
|
from c3nav.mesh.forms import MeshMessageForm
|
||||||
from c3nav.mesh.messages import MessageType
|
from c3nav.mesh.messages import MeshMessageType
|
||||||
from c3nav.mesh.models import MeshNode, NodeMessage
|
from c3nav.mesh.models import MeshNode, NodeMessage
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ class MeshMessageSendView(ControlPanelMixin, FormView):
|
||||||
|
|
||||||
def get_form_class(self):
|
def get_form_class(self):
|
||||||
try:
|
try:
|
||||||
return MeshMessageForm.get_form_for_type(MessageType[self.kwargs['msg_type']])
|
return MeshMessageForm.get_form_for_type(MeshMessageType[self.kwargs['msg_type']])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise Http404('unknown message type')
|
raise Http404('unknown message type')
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from django.utils import timezone
|
||||||
|
|
||||||
from c3nav.control.views.utils import get_mesh_comm_group
|
from c3nav.control.views.utils import get_mesh_comm_group
|
||||||
from c3nav.mesh import messages
|
from c3nav.mesh import messages
|
||||||
from c3nav.mesh.messages import Message, BROADCAST_ADDRESS
|
from c3nav.mesh.messages import MeshMessage, BROADCAST_ADDRESS
|
||||||
from c3nav.mesh.models import MeshNode, NodeMessage
|
from c3nav.mesh.models import MeshNode, NodeMessage
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ class MeshConsumer(WebsocketConsumer):
|
||||||
if bytes_data is None:
|
if bytes_data is None:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
msg = messages.Message.decode(bytes_data)
|
msg = messages.MeshMessage.decode(bytes_data)
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
return
|
return
|
||||||
|
@ -96,9 +96,9 @@ class MeshConsumer(WebsocketConsumer):
|
||||||
self.remove_dst_nodes((data["address"], ))
|
self.remove_dst_nodes((data["address"], ))
|
||||||
|
|
||||||
def mesh_send(self, data):
|
def mesh_send(self, data):
|
||||||
self.send_msg(Message.fromjson(data["msg"]))
|
self.send_msg(MeshMessage.fromjson(data["msg"]))
|
||||||
|
|
||||||
def log_received_message(self, src_node: MeshNode, msg: messages.Message):
|
def log_received_message(self, src_node: MeshNode, msg: messages.MeshMessage):
|
||||||
NodeMessage.objects.create(
|
NodeMessage.objects.create(
|
||||||
uplink_node=self.uplink_node,
|
uplink_node=self.uplink_node,
|
||||||
src_node=src_node,
|
src_node=src_node,
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django import forms
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from c3nav.mesh.messages import MessageType, Message, ROOT_ADDRESS
|
from c3nav.mesh.messages import MeshMessageType, MeshMessage, ROOT_ADDRESS
|
||||||
from c3nav.mesh.models import MeshNode
|
from c3nav.mesh.models import MeshNode
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ class MeshMessageForm(forms.Form):
|
||||||
|
|
||||||
|
|
||||||
class ConfigUplinkMessageForm(MeshMessageForm):
|
class ConfigUplinkMessageForm(MeshMessageForm):
|
||||||
msg_type = MessageType.CONFIG_UPLINK
|
msg_type = MeshMessageType.CONFIG_UPLINK
|
||||||
|
|
||||||
enabled = forms.BooleanField(required=False, label=_('enabled'))
|
enabled = forms.BooleanField(required=False, label=_('enabled'))
|
||||||
ssid = forms.CharField(required=False, label=_('ssid'), max_length=31)
|
ssid = forms.CharField(required=False, label=_('ssid'), max_length=31)
|
||||||
|
@ -80,7 +80,7 @@ class ConfigUplinkMessageForm(MeshMessageForm):
|
||||||
recipients = [self.recipient] if self.recipient else self.cleaned_data['recipients']
|
recipients = [self.recipient] if self.recipient else self.cleaned_data['recipients']
|
||||||
for recipient in recipients:
|
for recipient in recipients:
|
||||||
print('sending to ', recipient)
|
print('sending to ', recipient)
|
||||||
Message.fromjson({
|
MeshMessage.fromjson({
|
||||||
'dst': recipient,
|
'dst': recipient,
|
||||||
**msg_data,
|
**msg_data,
|
||||||
}).send()
|
}).send()
|
||||||
|
|
|
@ -16,7 +16,7 @@ NO_LAYER = 0xFF
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class MessageType(IntEnum):
|
class MeshMessageType(IntEnum):
|
||||||
ECHO_REQUEST = 0x01
|
ECHO_REQUEST = 0x01
|
||||||
ECHO_RESPONSE = 0x02
|
ECHO_RESPONSE = 0x02
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ class ChipType(IntEnum):
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Message:
|
class MeshMessage:
|
||||||
dst: str = field(metadata={'format': MacAddressFormat()})
|
dst: str = field(metadata={'format': MacAddressFormat()})
|
||||||
src: str = field(metadata={'format': MacAddressFormat()})
|
src: str = field(metadata={'format': MacAddressFormat()})
|
||||||
msg_id: int = field(metadata={'format': SimpleFormat('B')}, init=False, repr=False)
|
msg_id: int = field(metadata={'format': SimpleFormat('B')}, init=False, repr=False)
|
||||||
|
@ -53,9 +53,9 @@ class Message:
|
||||||
super().__init_subclass__(**kwargs)
|
super().__init_subclass__(**kwargs)
|
||||||
if msg_id:
|
if msg_id:
|
||||||
cls.msg_id = msg_id
|
cls.msg_id = msg_id
|
||||||
if msg_id in Message.msg_types:
|
if msg_id in MeshMessage.msg_types:
|
||||||
raise TypeError('duplicate use of msg_id %d' % msg_id)
|
raise TypeError('duplicate use of msg_id %d' % msg_id)
|
||||||
Message.msg_types[msg_id] = cls
|
MeshMessage.msg_types[msg_id] = cls
|
||||||
|
|
||||||
def encode(self):
|
def encode(self):
|
||||||
data = bytes()
|
data = bytes()
|
||||||
|
@ -92,42 +92,42 @@ class Message:
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class EchoRequestMessage(Message, msg_id=MessageType.ECHO_REQUEST):
|
class EchoRequestMessage(MeshMessage, msg_id=MeshMessageType.ECHO_REQUEST):
|
||||||
content: str = field(default='', metadata={'format': VarStrFormat()})
|
content: str = field(default='', metadata={'format': VarStrFormat()})
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class EchoResponseMessage(Message, msg_id=MessageType.ECHO_RESPONSE):
|
class EchoResponseMessage(MeshMessage, msg_id=MeshMessageType.ECHO_RESPONSE):
|
||||||
content: str = field(default='', metadata={'format': VarStrFormat()})
|
content: str = field(default='', metadata={'format': VarStrFormat()})
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class MeshSigninMessage(Message, msg_id=MessageType.MESH_SIGNIN):
|
class MeshSigninMessage(MeshMessage, msg_id=MeshMessageType.MESH_SIGNIN):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class MeshLayerAnnounceMessage(Message, msg_id=MessageType.MESH_LAYER_ANNOUNCE):
|
class MeshLayerAnnounceMessage(MeshMessage, msg_id=MeshMessageType.MESH_LAYER_ANNOUNCE):
|
||||||
layer: int = field(metadata={'format': SimpleFormat('B')})
|
layer: int = field(metadata={'format': SimpleFormat('B')})
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class MeshAddDestinationsMessage(Message, msg_id=MessageType.MESH_ADD_DESTINATIONS):
|
class MeshAddDestinationsMessage(MeshMessage, msg_id=MeshMessageType.MESH_ADD_DESTINATIONS):
|
||||||
mac_addresses: list[str] = field(default_factory=list, metadata={'format': MacAddressesListFormat()})
|
mac_addresses: list[str] = field(default_factory=list, metadata={'format': MacAddressesListFormat()})
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class MeshRemoveDestinationsMessage(Message, msg_id=MessageType.MESH_REMOVE_DESTINATIONS):
|
class MeshRemoveDestinationsMessage(MeshMessage, msg_id=MeshMessageType.MESH_REMOVE_DESTINATIONS):
|
||||||
mac_addresses: list[str] = field(default_factory=list, metadata={'format': MacAddressesListFormat()})
|
mac_addresses: list[str] = field(default_factory=list, metadata={'format': MacAddressesListFormat()})
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ConfigDumpMessage(Message, msg_id=MessageType.CONFIG_DUMP):
|
class ConfigDumpMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_DUMP):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ConfigFirmwareMessage(Message, msg_id=MessageType.CONFIG_FIRMWARE):
|
class ConfigFirmwareMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_FIRMWARE):
|
||||||
chip: int = field(metadata={'format': SimpleFormat('H')})
|
chip: int = field(metadata={'format': SimpleFormat('H')})
|
||||||
revision: int = field(metadata={'format': SimpleFormat('2B')})
|
revision: int = field(metadata={'format': SimpleFormat('2B')})
|
||||||
magic_word: int = field(metadata={'format': SimpleFormat('I')}, repr=False)
|
magic_word: int = field(metadata={'format': SimpleFormat('I')}, repr=False)
|
||||||
|
@ -155,19 +155,19 @@ class ConfigFirmwareMessage(Message, msg_id=MessageType.CONFIG_FIRMWARE):
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ConfigPositionMessage(Message, msg_id=MessageType.CONFIG_POSITION):
|
class ConfigPositionMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_POSITION):
|
||||||
x_pos: int = field(metadata={'format': SimpleFormat('I')})
|
x_pos: int = field(metadata={'format': SimpleFormat('I')})
|
||||||
y_pos: int = field(metadata={'format': SimpleFormat('I')})
|
y_pos: int = field(metadata={'format': SimpleFormat('I')})
|
||||||
z_pos: int = field(metadata={'format': SimpleFormat('H')})
|
z_pos: int = field(metadata={'format': SimpleFormat('H')})
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ConfigLedMessage(Message, msg_id=MessageType.CONFIG_LED):
|
class ConfigLedMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_LED):
|
||||||
led_config: LedConfig = field(metadata={'format': LedConfigFormat()})
|
led_config: LedConfig = field(metadata={'format': LedConfigFormat()})
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ConfigUplinkMessage(Message, msg_id=MessageType.CONFIG_UPLINK):
|
class ConfigUplinkMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_UPLINK):
|
||||||
enabled: bool = field(metadata={'format': BoolFormat()})
|
enabled: bool = field(metadata={'format': BoolFormat()})
|
||||||
ssid: str = field(metadata={'format': FixedStrFormat(32)})
|
ssid: str = field(metadata={'format': FixedStrFormat(32)})
|
||||||
password: str = field(metadata={'format': FixedStrFormat(64)})
|
password: str = field(metadata={'format': FixedStrFormat(64)})
|
||||||
|
|
|
@ -4,7 +4,7 @@ from functools import cached_property
|
||||||
from django.db import models, NotSupportedError
|
from django.db import models, NotSupportedError
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from c3nav.mesh.messages import MessageType, ChipType, Message as MeshMessage
|
from c3nav.mesh.messages import MeshMessageType, ChipType, MeshMessage as MeshMessage
|
||||||
|
|
||||||
|
|
||||||
class MeshNodeQuerySet(models.QuerySet):
|
class MeshNodeQuerySet(models.QuerySet):
|
||||||
|
@ -18,10 +18,10 @@ class MeshNodeQuerySet(models.QuerySet):
|
||||||
clone._prefetch_last_messages = self._prefetch_last_messages
|
clone._prefetch_last_messages = self._prefetch_last_messages
|
||||||
return clone
|
return clone
|
||||||
|
|
||||||
def prefetch_last_messages(self, *types: MessageType):
|
def prefetch_last_messages(self, *types: MeshMessageType):
|
||||||
clone = self._chain()
|
clone = self._chain()
|
||||||
clone._prefetch_last_messages |= (
|
clone._prefetch_last_messages |= (
|
||||||
set(types) if types else set(msgtype.value for msgtype in MessageType)
|
set(types) if types else set(msgtype.value for msgtype in MeshMessageType)
|
||||||
)
|
)
|
||||||
return clone
|
return clone
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ class MeshNodeQuerySet(models.QuerySet):
|
||||||
nodes[message.node].last_messages[message.message_type] = message
|
nodes[message.node].last_messages[message.message_type] = message
|
||||||
except NotSupportedError:
|
except NotSupportedError:
|
||||||
pass
|
pass
|
||||||
print(tuple(nodes.values())[0].last_messages[MessageType.MESH_SIGNIN])
|
print(tuple(nodes.values())[0].last_messages[MeshMessageType.MESH_SIGNIN])
|
||||||
|
|
||||||
|
|
||||||
class LastMessagesByTypeLookup(UserDict):
|
class LastMessagesByTypeLookup(UserDict):
|
||||||
|
@ -46,14 +46,14 @@ class LastMessagesByTypeLookup(UserDict):
|
||||||
self.node = node
|
self.node = node
|
||||||
|
|
||||||
def _get_key(self, item):
|
def _get_key(self, item):
|
||||||
if isinstance(item, MessageType):
|
if isinstance(item, MeshMessageType):
|
||||||
return item
|
return item
|
||||||
if isinstance(item, str):
|
if isinstance(item, str):
|
||||||
try:
|
try:
|
||||||
return getattr(MessageType, item)
|
return getattr(MeshMessageType, item)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
return MessageType(item)
|
return MeshMessageType(item)
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
key = self._get_key(key)
|
key = self._get_key(key)
|
||||||
|
@ -89,7 +89,7 @@ class MeshNode(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class NodeMessage(models.Model):
|
class NodeMessage(models.Model):
|
||||||
MESSAGE_TYPES = [(msgtype.value, msgtype.name) for msgtype in MessageType]
|
MESSAGE_TYPES = [(msgtype.value, msgtype.name) for msgtype in MeshMessageType]
|
||||||
src_node = models.ForeignKey('MeshNode', models.PROTECT,
|
src_node = models.ForeignKey('MeshNode', models.PROTECT,
|
||||||
related_name='received_messages', verbose_name=_('node'))
|
related_name='received_messages', verbose_name=_('node'))
|
||||||
uplink_node = models.ForeignKey('MeshNode', models.PROTECT,
|
uplink_node = models.ForeignKey('MeshNode', models.PROTECT,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue