diff --git a/relay/bluetooth_handler.py b/relay/bluetooth_handler.py index be45241..97e3f1f 100644 --- a/relay/bluetooth_handler.py +++ b/relay/bluetooth_handler.py @@ -112,6 +112,16 @@ class BluetoothHandler: print("Advertising Bluetooth...") self.ble.gap_advertise(100_000, self.advertising_payload(name="MeshNode", services=[SERVICE_UUID])) + def send_packet(self, packet_type: int, data: dict): + if not self.connections: + print("No connected devices to send to.") + return + + payload = struct.pack(" bool: + if msg.message_id in self.recent_messages: + return True + self.recent_messages.append(msg.message_id) + return False + def forward(self, msg: LoRaMessage): + # ensure we don't process a message twice + if self.has_seen_message(msg): + return + msg_bytes = msg.encode() self.radio.send(msg_bytes) @@ -83,9 +91,8 @@ class LoRaHandler: def on_receive(self, msg: LoRaMessage): # ensure we don't process a message twice - if msg.message_id in self.recent_messages: + if self.has_seen_message(msg): return - self.recent_messages.append(msg.message_id) # messages has a lifetime to prevent infinite loops. # if we receive a message with lifetime <= 0 we just drop it, @@ -106,8 +113,10 @@ class LoRaHandler: if not msg.sender_id in self.neighbours: print(f"Neighbour discovered: {msg.sender_id}") self.neighbours.add(msg.sender_id) - self.send(b"Ping!", msg.sender_id) + # tell the sender we heard them by sending a ping back + self.send(b"Ping!", msg.sender_id) + self.forward(msg) return asyncio.create_task(self.message_queue.put(msg)) diff --git a/relay/settings.json b/relay/settings.json new file mode 100644 index 0000000..64f4963 --- /dev/null +++ b/relay/settings.json @@ -0,0 +1,3 @@ +{ + "display_name": "Cool Guy" +} \ No newline at end of file