A fully distributed, multi-hop ad-hoc chat application built on top of an emulated wireless sound communication layer that simulates underwater communication between nodes.
Scuba Chat enables text messaging between nodes without any central server. All routing, addressing, and medium access control is handled by the nodes themselves. The physical layer emulates sound-based wireless communication, reflecting the constraints of real underwater environments (low data rates, limited range, high error rates).
- Broadcast messaging — reliable text broadcasting to all reachable nodes, with correct ordering guaranteed
- Whisper (private) messages — send a message directly to a specific node
- Arbitrary message length — long messages are automatically fragmented, transmitted, and reassembled
- Multi-hop forwarding — messages are routed through intermediate nodes when the destination is out of direct range
- Dynamic addressing — nodes are uniquely identified and the network adapts when nodes join or leave
- Reachable node discovery — each node maintains an up-to-date list of reachable nodes, including those multiple hops away
- Medium access control — collision avoidance to handle hidden/exposed node problems
- Packet loss resilience — the system handles at least 25% packet loss without exceeding 10-minute delivery times
The application runs on top of a provided physical layer framework that connects to an emulation server over the internet. Each node communicates via a single shared sound channel using two frame types:
DATA— 32-byte frames for regular messagesDATA SHORT— 2-byte frames for control signals
The network stack (addressing, MAC, routing, fragmentation, reliability) is implemented entirely by the application.
| Command | Description |
|---|---|
/broadcast <message> |
Broadcast a message to all reachable nodes |
/whisper <node> <message> |
Send a private message to a specific node |
/reachable |
Display all reachable nodes for a specific node |
/help |
Display help information |
/quit |
Disconnect the node |