# that-sky-project/that-sky-colorsky-udp architecture

> Architecture diagram of the GitHub repository that-sky-project/that-sky-colorsky-udp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/that-sky-project/that-sky-colorsky-udp
- Repository: https://github.com/that-sky-project/that-sky-colorsky-udp

## Overview

ColorSky is an ENet-based UDP server for Sky: Children of the Light. Clients connect and join a level; the server tracks peers and room membership, routes packet and game-message types, and relays multiplayer updates. A periodic tick synchronizes movement, level data, and snapshot acknowledgments. The graph reflects the documented host event dispatch and sampled packet/message dispatch; internal wiring for unsampled handlers is left out.

Main entry points: [`src/server/state.rs`](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/state.rs) (Server state), [`src/server/packet/mod.rs`](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/packet/mod.rs) (Packet dispatch), [`src/server/game_msg/mod.rs`](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/mod.rs) (Game message dispatch), [`src/server/host.rs`](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/host.rs) (ENet host loop)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_transport["Transport"]
  node_host["ENet host loop<br/>[host.rs]"]
  node_state["Server state<br/>[state.rs]"]
  node_peers["Peer tracking<br/>[peer.rs]"]
  node_receive["Receive handling<br/>[receive.rs]"]
end

subgraph group_wire["Wire Protocol"]
  node_packet["Packet codec<br/>[packet.rs]"]
  node_gamecodec["Game message codec<br/>[mod.rs]"]
end

subgraph group_rooms["Room Handling"]
  node_packetdispatch["Packet dispatch<br/>[mod.rs]"]
  node_join["Join handling<br/>[join.rs]"]
  node_levelupdate["Level changes<br/>[level_update.rs]"]
end

subgraph group_sync["Multiplayer Sync"]
  node_gamedispatch["Game message dispatch<br/>[mod.rs]"]
  node_netrpc["RPC relay<br/>[net_rpc.rs]"]
  node_playerstate["Player state<br/>[player_state.rs]"]
  node_leveldata["Level data<br/>[level.rs]"]
  node_snapshotack["Snapshot acknowledgments<br/>[snapshot_ack.rs]"]
  node_snapshots["Snapshot compression<br/>[snapshot.rs]"]
end

node_clients(("Game clients"))
node_enet{{"ENet library"}}

node_clients -->|"send datagrams"| node_enet
node_enet -->|"deliver events"| node_host
node_host -->|"create and flush"| node_enet
node_host -->|"dispatch events"| node_state
node_host -->|"run sync ticks"| node_state
node_state -->|"receive packets"| node_receive
node_receive -->|"parse packets"| node_packet
node_state -->|"track peers"| node_peers
node_state -->|"handle packets"| node_packetdispatch
node_packetdispatch -->|"handle joins"| node_join
node_packetdispatch -->|"handle level changes"| node_levelupdate
node_packetdispatch -->|"parse game messages"| node_gamecodec
node_packetdispatch -->|"dispatch messages"| node_gamedispatch
node_gamedispatch -->|"handle RPCs"| node_netrpc
node_gamedispatch -->|"handle player state"| node_playerstate
node_gamedispatch -->|"handle level data"| node_leveldata
node_gamedispatch -->|"handle acknowledgments"| node_snapshotack
node_playerstate -->|"compress state"| node_snapshots
node_leveldata -->|"compress level data"| node_snapshots
node_state -->|"send updates"| node_clients

click node_host "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/host.rs"
click node_state "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/state.rs"
click node_peers "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/peer.rs"
click node_receive "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/receive.rs"
click node_packet "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/protocol/packet.rs"
click node_gamecodec "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/protocol/game_msg/mod.rs"
click node_packetdispatch "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/packet/mod.rs"
click node_join "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/packet/join.rs"
click node_levelupdate "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/packet/level_update.rs"
click node_gamedispatch "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/mod.rs"
click node_netrpc "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/net_rpc.rs"
click node_playerstate "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/player_state.rs"
click node_leveldata "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/level.rs"
click node_snapshotack "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/snapshot_ack.rs"
click node_snapshots "https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/utils/snapshot.rs"

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_host,node_state,node_peers,node_receive,node_clients toneBlue
class node_packet,node_gamecodec toneAmber
class node_packetdispatch,node_join,node_levelupdate toneMint
class node_gamedispatch,node_netrpc,node_playerstate,node_leveldata,node_snapshotack,node_snapshots toneRose
class node_enet toneIndigo
```

## Components

### Transport

- [ENet host loop](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/host.rs): `src/server/host.rs`
- [Server state](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/state.rs): `src/server/state.rs`
- [Peer tracking](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/peer.rs): `src/server/peer.rs`
- [Receive handling](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/receive.rs): `src/server/receive.rs`

### Wire Protocol

- [Packet codec](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/protocol/packet.rs): `src/protocol/packet.rs`
- [Game message codec](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/protocol/game_msg/mod.rs): `src/protocol/game_msg/mod.rs`

### Room Handling

- [Packet dispatch](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/packet/mod.rs): `src/server/packet/mod.rs`
- [Join handling](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/packet/join.rs): `src/server/packet/join.rs`
- [Level changes](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/packet/level_update.rs): `src/server/packet/level_update.rs`

### Multiplayer Sync

- [Game message dispatch](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/mod.rs): `src/server/game_msg/mod.rs`
- [RPC relay](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/net_rpc.rs): `src/server/game_msg/net_rpc.rs`
- [Player state](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/player_state.rs): `src/server/game_msg/player_state.rs`
- [Level data](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/level.rs): `src/server/game_msg/level.rs`
- [Snapshot acknowledgments](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/server/game_msg/snapshot_ack.rs): `src/server/game_msg/snapshot_ack.rs`
- [Snapshot compression](https://github.com/that-sky-project/that-sky-colorsky-udp/blob/main/src/utils/snapshot.rs): `src/utils/snapshot.rs`

### Other components

- **Game clients**
- **ENet library**

## Connections

- Game clients → ENet library: send datagrams
- ENet library → ENet host loop: deliver events
- ENet host loop → ENet library: create and flush
- ENet host loop → Server state: dispatch events
- ENet host loop → Server state: run sync ticks
- Server state → Receive handling: receive packets
- Receive handling → Packet codec: parse packets
- Server state → Peer tracking: track peers
- Server state → Packet dispatch: handle packets
- Packet dispatch → Join handling: handle joins
- Packet dispatch → Level changes: handle level changes
- Packet dispatch → Game message codec: parse game messages
- Packet dispatch → Game message dispatch: dispatch messages
- Game message dispatch → RPC relay: handle RPCs
- Game message dispatch → Player state: handle player state
- Game message dispatch → Level data: handle level data
- Game message dispatch → Snapshot acknowledgments: handle acknowledgments
- Player state → Snapshot compression: compress state
- Level data → Snapshot compression: compress level data
- Server state → Game clients: send updates
