# rikonenobais/the-one architecture

> Architecture diagram of the GitHub repository rikonenobais/the-one, 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/rikonenobais/the-one
- Repository: https://github.com/rikonenobais/the-one

## Overview

The ONE SDU Mod is an opportunistic-network simulator. A user configures and starts a run; the simulator creates a world of mobile hosts, generates connections and messages, applies routing protocols to forwarding, then exposes the run interactively or produces reports. Its distinct stages include event and map input, movement and connectivity, message applications, routing, and result inspection. The repository also includes reinforcement-learning support and an optional DTN2 bridge. README capabilities establish the broad workflow; sampled source confirms decision-engine/router interactions, but not every subsystem’s wiring.

Main entry points: [`src/core/DTNSim.java`](https://github.com/rikonenobais/the-one/blob/main/src/core/DTNSim.java) (Simulation engine), [`src/routing/DecisionEngineRouter.java`](https://github.com/rikonenobais/the-one/blob/main/src/routing/DecisionEngineRouter.java) (Router framework), [`src/core/World.java`](https://github.com/rikonenobais/the-one/blob/main/src/core/World.java) (World and hosts), [`src/core/SimScenario.java`](https://github.com/rikonenobais/the-one/blob/main/src/core/SimScenario.java) (Scenario setup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Simulation runtime"]
  node_config["Run settings<br/>[Settings.java]"]
  node_engine["Simulation engine<br/>[DTNSim.java]"]
  node_world["World and hosts<br/>[World.java]"]
  node_network["Network interfaces"]
  node_message["Messages and buffers<br/>[Message.java]"]
end

subgraph group_inputs["Scenario inputs"]
  node_scenario["Scenario setup<br/>[SimScenario.java]"]
  node_eventinput["Events and messages<br/>[EventQueue.java]"]
  node_mapinput["Map input<br/>[WKTMapReader.java]"]
  node_mobility["Movement models<br/>[MovementModel.java]"]
end

subgraph group_routing["Messaging and routing"]
  node_application["Message applications"]
  node_router["Router framework"]
  node_protocols["Routing protocols"]
  node_reinforcement["Reinforcement learning<br/>[QAgent.java]"]
end

subgraph group_results["Results and inspection"]
  node_report["Simulation reports<br/>[Report.java]"]
  node_gui["Interactive visualization<br/>[DTNSimGUI.java]"]
  node_textui["Text interface<br/>[DTNSimTextUI.java]"]
end

subgraph group_extensions["Optional extensions"]
  node_dtnbridge["DTN2 bridge<br/>[DTN2Manager.java]"]
end

node_user(("Simulator user"))
node_dtnd(("External DTN daemon"))

node_user -->|"configures"| node_config
node_user -->|"starts run"| node_engine
node_config -->|"sets up"| node_scenario
node_scenario -->|"creates"| node_world
node_eventinput -->|"supplies events"| node_scenario
node_mapinput -->|"supplies map"| node_scenario
node_mobility -->|"moves hosts"| node_world
node_engine -->|"advances"| node_world
node_world -->|"connects hosts"| node_network
node_application -->|"creates messages"| node_message
node_message -->|"enters forwarding"| node_router
node_router -->|"queries decisions"| node_protocols
node_router -->|"transfers messages"| node_network
node_engine -->|"emits results"| node_report
node_engine -->|"visualizes run"| node_gui
node_user -->|"runs batch"| node_textui
node_router -.->|"uses learning"| node_reinforcement
node_engine -.->|"initializes bridge"| node_dtnbridge
node_dtnbridge -.->|"exchanges bundles"| node_dtnd

click node_config "https://github.com/rikonenobais/the-one/blob/main/src/core/Settings.java"
click node_engine "https://github.com/rikonenobais/the-one/blob/main/src/core/DTNSim.java"
click node_world "https://github.com/rikonenobais/the-one/blob/main/src/core/World.java"
click node_scenario "https://github.com/rikonenobais/the-one/blob/main/src/core/SimScenario.java"
click node_eventinput "https://github.com/rikonenobais/the-one/blob/main/src/input/EventQueue.java"
click node_mapinput "https://github.com/rikonenobais/the-one/blob/main/src/input/WKTMapReader.java"
click node_mobility "https://github.com/rikonenobais/the-one/blob/main/src/movement/MovementModel.java"
click node_network "https://github.com/rikonenobais/the-one/blob/main/src/interfaces/SimpleBroadcastInterface.java"
click node_application "https://github.com/rikonenobais/the-one/blob/main/src/applications/PingApplication.java"
click node_message "https://github.com/rikonenobais/the-one/blob/main/src/core/Message.java"
click node_router "https://github.com/rikonenobais/the-one/blob/main/src/routing/DecisionEngineRouter.java"
click node_protocols "https://github.com/rikonenobais/the-one/tree/main/src/routing"
click node_reinforcement "https://github.com/rikonenobais/the-one/blob/main/src/reinforcement/qlearn/QAgent.java"
click node_report "https://github.com/rikonenobais/the-one/blob/main/src/report/Report.java"
click node_gui "https://github.com/rikonenobais/the-one/blob/main/src/gui/DTNSimGUI.java"
click node_textui "https://github.com/rikonenobais/the-one/blob/main/src/ui/DTNSimTextUI.java"
click node_dtnbridge "https://github.com/rikonenobais/the-one/blob/main/src/core/DTN2Manager.java"

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_config,node_engine,node_world,node_network,node_message,node_user toneBlue
class node_scenario,node_eventinput,node_mapinput,node_mobility toneAmber
class node_application,node_router,node_protocols,node_reinforcement toneMint
class node_report,node_gui,node_textui toneRose
class node_dtnbridge,node_dtnd toneIndigo
```

## Components

### Simulation runtime

- [Run settings](https://github.com/rikonenobais/the-one/blob/main/src/core/Settings.java): `src/core/Settings.java`
- [Simulation engine](https://github.com/rikonenobais/the-one/blob/main/src/core/DTNSim.java): `src/core/DTNSim.java`
- [World and hosts](https://github.com/rikonenobais/the-one/blob/main/src/core/World.java): `src/core/World.java`
- [Network interfaces](https://github.com/rikonenobais/the-one/blob/main/src/interfaces/SimpleBroadcastInterface.java): `src/interfaces/SimpleBroadcastInterface.java`
- [Messages and buffers](https://github.com/rikonenobais/the-one/blob/main/src/core/Message.java): `src/core/Message.java`

### Scenario inputs

- [Scenario setup](https://github.com/rikonenobais/the-one/blob/main/src/core/SimScenario.java): `src/core/SimScenario.java`
- [Events and messages](https://github.com/rikonenobais/the-one/blob/main/src/input/EventQueue.java): `src/input/EventQueue.java`
- [Map input](https://github.com/rikonenobais/the-one/blob/main/src/input/WKTMapReader.java): `src/input/WKTMapReader.java`
- [Movement models](https://github.com/rikonenobais/the-one/blob/main/src/movement/MovementModel.java): `src/movement/MovementModel.java`

### Messaging and routing

- [Message applications](https://github.com/rikonenobais/the-one/blob/main/src/applications/PingApplication.java): `src/applications/PingApplication.java`
- [Router framework](https://github.com/rikonenobais/the-one/blob/main/src/routing/DecisionEngineRouter.java): `src/routing/DecisionEngineRouter.java`
- [Routing protocols](https://github.com/rikonenobais/the-one/tree/main/src/routing): `src/routing`
- [Reinforcement learning](https://github.com/rikonenobais/the-one/blob/main/src/reinforcement/qlearn/QAgent.java): `src/reinforcement/qlearn/QAgent.java`

### Results and inspection

- [Simulation reports](https://github.com/rikonenobais/the-one/blob/main/src/report/Report.java): `src/report/Report.java`
- [Interactive visualization](https://github.com/rikonenobais/the-one/blob/main/src/gui/DTNSimGUI.java): `src/gui/DTNSimGUI.java`
- [Text interface](https://github.com/rikonenobais/the-one/blob/main/src/ui/DTNSimTextUI.java): `src/ui/DTNSimTextUI.java`

### Optional extensions

- [DTN2 bridge](https://github.com/rikonenobais/the-one/blob/main/src/core/DTN2Manager.java): `src/core/DTN2Manager.java`

### Other components

- **Simulator user**
- **External DTN daemon**

## Connections

- Simulator user → Run settings: configures
- Simulator user → Simulation engine: starts run
- Run settings → Scenario setup: sets up
- Scenario setup → World and hosts: creates
- Events and messages → Scenario setup: supplies events
- Map input → Scenario setup: supplies map
- Movement models → World and hosts: moves hosts
- Simulation engine → World and hosts: advances
- World and hosts → Network interfaces: connects hosts
- Message applications → Messages and buffers: creates messages
- Messages and buffers → Router framework: enters forwarding
- Router framework → Routing protocols: queries decisions
- Router framework → Network interfaces: transfers messages
- Simulation engine → Simulation reports: emits results
- Simulation engine → Interactive visualization: visualizes run
- Simulator user → Text interface: runs batch
- Router framework → Reinforcement learning: uses learning
- Simulation engine → DTN2 bridge: initializes bridge
- DTN2 bridge → External DTN daemon: exchanges bundles
