# dawtrin/emergency-mesh-desktop architecture

> Architecture diagram of the GitHub repository dawtrin/emergency-mesh-desktop, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dawtrin/emergency-mesh-desktop
- Repository: https://github.com/dawtrin/emergency-mesh-desktop

## Overview

Emergency Mesh Rescue is a JavaFX command-and-control application for receiving SOS reports from simulated field nodes over a TCP mesh and dispatching instructions back to them. Field nodes create SOS and heartbeat packets; relay routing forwards packets, while load reports help the base station choose relays for dispatch and failover. The base station presents incidents in a victim table and map and raises an audible alarm. Excerpts confirm these main paths; some UI and server callback wiring is not shown, so uncertain connections are omitted.

Main entry points: [`src/main/java/com/rescue/mesh/ui/controller/BaseStationController.java`](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/ui/controller/BaseStationController.java) (Command Dashboard), [`src/main/java/com/rescue/mesh/ui/controller/NodeClientController.java`](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/ui/controller/NodeClientController.java) (Node Client UI), [`src/main/java/com/rescue/mesh/routing/RoutingEngine.java`](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/RoutingEngine.java) (Packet Router), [`src/main/java/com/rescue/mesh/network/SocketServer.java`](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/network/SocketServer.java) (TCP Server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_field["Field Nodes"]
  node_nodeui["Node Client UI"]
  node_nodeapp["Node Application"]
  node_config["Node Configuration<br/>[NodeConfig.java]"]
  node_node_layout["Node Layout<br/>[NodeClient.fxml]"]
  node_properties["Node Properties"]
end

subgraph group_transport["Mesh Transport"]
  node_server["TCP Server<br/>[SocketServer.java]"]
  node_client["TCP Client<br/>[SocketClient.java]"]
  node_routing["Packet Router<br/>[RoutingEngine.java]"]
  node_seen["Duplicate Cache"]
end

subgraph group_command["Command Center"]
  node_baseapp["Station Application"]
  node_baseui["Command Dashboard"]
  node_victims["Victim Table Rows"]
  node_balancer["Relay Load Balancer<br/>[LoadBalancer.java]"]
  node_status["Relay Status<br/>[NodeStatus.java]"]
  node_alarm["SOS Alarm<br/>[AlarmPlayer.java]"]
  node_map["Offline Map"]
  node_ui_layout["Station Layout<br/>[BaseStation.fxml]"]
end

subgraph group_shared["Packet Model"]
  node_packet["Mesh Packet<br/>[MeshPacket.java]"]
  node_factory["Packet Factory<br/>[PacketFactory.java]"]
  node_checksum["Checksum Utility<br/>[ChecksumUtil.java]"]
end

node_victim(("Rescue Operator"))
node_commander(("Station Commander"))
node_mesh_peer(("Mesh Peer"))

node_victim -->|"reports SOS"| node_nodeui
node_nodeapp -->|"loads settings"| node_config
node_nodeapp -->|"starts UI"| node_nodeui
node_nodeui -->|"creates SOS"| node_factory
node_nodeui -->|"creates heartbeat"| node_factory
node_nodeui -->|"creates load report"| node_factory
node_nodeui -->|"processes packet"| node_routing
node_nodeui -->|"sends report"| node_client
node_nodeui -->|"starts listener"| node_server
node_node_layout -->|"defines view"| node_nodeui
node_properties -->|"configures node"| node_config
node_server -->|"passes packet"| node_routing
node_mesh_peer -->|"sends packet"| node_server
node_routing -->|"checks duplicates"| node_seen
node_routing -->|"forwards packet"| node_client
node_routing -->|"relays packet"| node_mesh_peer
node_routing -->|"routes packet"| node_packet
node_factory -->|"builds packet"| node_packet
node_packet -->|"computes checksum"| node_checksum
node_baseapp -->|"loads station"| node_baseui
node_baseui -->|"starts listener"| node_server
node_baseui -->|"selects relay"| node_balancer
node_balancer -->|"tracks relay"| node_status
node_baseui -->|"creates dispatch"| node_factory
node_baseui -->|"sends dispatch"| node_client
node_baseui -->|"plays alarm"| node_alarm
node_baseui -->|"presents incidents"| node_victims
node_baseui -->|"renders locations"| node_map
node_baseapp -->|"loads view"| node_ui_layout
node_commander -->|"dispatches command"| node_baseui
node_server -.->|"delivers events"| node_baseui
node_mesh_peer -->|"receives packet"| node_client

click node_nodeui "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/ui/controller/NodeClientController.java"
click node_nodeapp "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/SimulatedNodeApp.java"
click node_config "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/network/NodeConfig.java"
click node_server "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/network/SocketServer.java"
click node_client "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/network/SocketClient.java"
click node_routing "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/RoutingEngine.java"
click node_seen "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/SeenPacketCache.java"
click node_packet "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/model/MeshPacket.java"
click node_factory "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/util/PacketFactory.java"
click node_checksum "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/util/ChecksumUtil.java"
click node_baseapp "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/BaseStationApp.java"
click node_baseui "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/ui/controller/BaseStationController.java"
click node_victims "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/ui/component/VictimTableRow.java"
click node_balancer "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/LoadBalancer.java"
click node_status "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/NodeStatus.java"
click node_alarm "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/audio/AlarmPlayer.java"
click node_map "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/resources/map/leaflet_offline.html"
click node_ui_layout "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/resources/fxml/BaseStation.fxml"
click node_node_layout "https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/resources/fxml/NodeClient.fxml"
click node_properties "https://github.com/dawtrin/emergency-mesh-desktop/tree/main/config"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_nodeui,node_nodeapp,node_config,node_node_layout,node_properties toneBlue
class node_server,node_client,node_routing,node_seen toneAmber
class node_baseapp,node_baseui,node_victims,node_balancer,node_status,node_alarm,node_map,node_ui_layout toneMint
class node_packet,node_factory,node_checksum toneRose
class node_victim,node_commander,node_mesh_peer toneIndigo
```

## Components

### Field Nodes

- [Node Client UI](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/ui/controller/NodeClientController.java): `src/main/java/com/rescue/mesh/ui/controller/NodeClientController.java`
- [Node Application](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/SimulatedNodeApp.java): `src/main/java/com/rescue/mesh/SimulatedNodeApp.java`
- [Node Configuration](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/network/NodeConfig.java): `src/main/java/com/rescue/mesh/network/NodeConfig.java`
- [Node Layout](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/resources/fxml/NodeClient.fxml): `src/main/resources/fxml/NodeClient.fxml`
- [Node Properties](https://github.com/dawtrin/emergency-mesh-desktop/tree/main/config): `config`

### Mesh Transport

- [TCP Server](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/network/SocketServer.java): `src/main/java/com/rescue/mesh/network/SocketServer.java`
- [TCP Client](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/network/SocketClient.java): `src/main/java/com/rescue/mesh/network/SocketClient.java`
- [Packet Router](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/RoutingEngine.java): `src/main/java/com/rescue/mesh/routing/RoutingEngine.java`
- [Duplicate Cache](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/SeenPacketCache.java): `src/main/java/com/rescue/mesh/routing/SeenPacketCache.java`

### Command Center

- [Station Application](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/BaseStationApp.java): `src/main/java/com/rescue/mesh/BaseStationApp.java`
- [Command Dashboard](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/ui/controller/BaseStationController.java): `src/main/java/com/rescue/mesh/ui/controller/BaseStationController.java`
- [Victim Table Rows](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/ui/component/VictimTableRow.java): `src/main/java/com/rescue/mesh/ui/component/VictimTableRow.java`
- [Relay Load Balancer](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/LoadBalancer.java): `src/main/java/com/rescue/mesh/routing/LoadBalancer.java`
- [Relay Status](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/routing/NodeStatus.java): `src/main/java/com/rescue/mesh/routing/NodeStatus.java`
- [SOS Alarm](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/audio/AlarmPlayer.java): `src/main/java/com/rescue/mesh/audio/AlarmPlayer.java`
- [Offline Map](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/resources/map/leaflet_offline.html): `src/main/resources/map/leaflet_offline.html`
- [Station Layout](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/resources/fxml/BaseStation.fxml): `src/main/resources/fxml/BaseStation.fxml`

### Packet Model

- [Mesh Packet](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/model/MeshPacket.java): `src/main/java/com/rescue/mesh/model/MeshPacket.java`
- [Packet Factory](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/util/PacketFactory.java): `src/main/java/com/rescue/mesh/util/PacketFactory.java`
- [Checksum Utility](https://github.com/dawtrin/emergency-mesh-desktop/blob/main/src/main/java/com/rescue/mesh/util/ChecksumUtil.java): `src/main/java/com/rescue/mesh/util/ChecksumUtil.java`

### Other components

- **Rescue Operator**
- **Station Commander**
- **Mesh Peer**

## Connections

- Rescue Operator → Node Client UI: reports SOS
- Node Application → Node Configuration: loads settings
- Node Application → Node Client UI: starts UI
- Node Client UI → Packet Factory: creates SOS
- Node Client UI → Packet Factory: creates heartbeat
- Node Client UI → Packet Factory: creates load report
- Node Client UI → Packet Router: processes packet
- Node Client UI → TCP Client: sends report
- Node Client UI → TCP Server: starts listener
- Node Layout → Node Client UI: defines view
- Node Properties → Node Configuration: configures node
- TCP Server → Packet Router: passes packet
- Mesh Peer → TCP Server: sends packet
- Packet Router → Duplicate Cache: checks duplicates
- Packet Router → TCP Client: forwards packet
- Packet Router → Mesh Peer: relays packet
- Packet Router → Mesh Packet: routes packet
- Packet Factory → Mesh Packet: builds packet
- Mesh Packet → Checksum Utility: computes checksum
- Station Application → Command Dashboard: loads station
- Command Dashboard → TCP Server: starts listener
- Command Dashboard → Relay Load Balancer: selects relay
- Relay Load Balancer → Relay Status: tracks relay
- Command Dashboard → Packet Factory: creates dispatch
- Command Dashboard → TCP Client: sends dispatch
- Command Dashboard → SOS Alarm: plays alarm
- Command Dashboard → Victim Table Rows: presents incidents
- Command Dashboard → Offline Map: renders locations
- Station Application → Station Layout: loads view
- Station Commander → Command Dashboard: dispatches command
- TCP Server → Command Dashboard: delivers events
- Mesh Peer → TCP Client: receives packet
