mirror of
https://github.com/markqvist/Reticulum.git
synced 2026-04-27 14:20:35 +00:00
Allow channel message handlers to short circuit
- a message handler can return logical True to prevent subsequent message handlers from running
This commit is contained in:
parent
a61b15cf6a
commit
e005826151
4 changed files with 79 additions and 27 deletions
|
|
@ -245,13 +245,49 @@ class TestChannel(unittest.TestCase):
|
|||
self.assertEqual(MessageState.MSGSTATE_FAILED, packet.state)
|
||||
self.assertFalse(envelope.tracked)
|
||||
|
||||
def test_multiple_handler(self):
|
||||
handler1_called = 0
|
||||
handler1_return = True
|
||||
handler2_called = 0
|
||||
|
||||
def handler1(msg: MessageBase):
|
||||
nonlocal handler1_called, handler1_return
|
||||
self.assertIsInstance(msg, MessageTest)
|
||||
handler1_called += 1
|
||||
return handler1_return
|
||||
|
||||
def handler2(msg: MessageBase):
|
||||
nonlocal handler2_called
|
||||
self.assertIsInstance(msg, MessageTest)
|
||||
handler2_called += 1
|
||||
|
||||
message = MessageTest()
|
||||
self.h.channel.register_message_type(MessageTest)
|
||||
self.h.channel.add_message_handler(handler1)
|
||||
self.h.channel.add_message_handler(handler2)
|
||||
envelope = RNS.Channel.Envelope(self.h.outlet, message, sequence=0)
|
||||
raw = envelope.pack()
|
||||
self.h.channel.receive(raw)
|
||||
|
||||
self.assertEqual(1, handler1_called)
|
||||
self.assertEqual(0, handler2_called)
|
||||
|
||||
handler1_return = False
|
||||
envelope = RNS.Channel.Envelope(self.h.outlet, message, sequence=1)
|
||||
raw = envelope.pack()
|
||||
self.h.channel.receive(raw)
|
||||
|
||||
self.assertEqual(2, handler1_called)
|
||||
self.assertEqual(1, handler2_called)
|
||||
|
||||
|
||||
def eat_own_dog_food(self, message: MessageBase, checker: typing.Callable[[MessageBase], None]):
|
||||
decoded: [MessageBase] = []
|
||||
|
||||
def handle_message(message: MessageBase):
|
||||
decoded.append(message)
|
||||
|
||||
self.h.channel.add_message_callback(handle_message)
|
||||
self.h.channel.add_message_handler(handle_message)
|
||||
self.assertEqual(len(self.h.outlet.packets), 0)
|
||||
|
||||
envelope = self.h.channel.send(message)
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ class TestLink(unittest.TestCase):
|
|||
|
||||
channel = l1.get_channel()
|
||||
channel.register_message_type(MessageTest)
|
||||
channel.add_message_callback(handle_message)
|
||||
channel.add_message_handler(handle_message)
|
||||
channel.send(test_message)
|
||||
|
||||
time.sleep(0.5)
|
||||
|
|
@ -466,7 +466,7 @@ def targets(yp=False):
|
|||
message.data = message.data + " back"
|
||||
channel.send(message)
|
||||
channel.register_message_type(MessageTest)
|
||||
channel.add_message_callback(handle_message)
|
||||
channel.add_message_handler(handle_message)
|
||||
|
||||
m_rns = RNS.Reticulum("./tests/rnsconfig")
|
||||
id1 = RNS.Identity.from_bytes(bytes.fromhex(fixed_keys[0][0]))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue