# fyberov-dev/lobby-system-2 architecture

> Architecture diagram of the GitHub repository fyberov-dev/lobby-system-2, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fyberov-dev/lobby-system-2
- Repository: https://github.com/fyberov-dev/lobby-system-2

## Overview

This is a LibGDX multiplayer lobby client with a Kryonet server. The main workflow registers a player, lists available lobbies, creates or joins a lobby, and leaves it; server state changes are sent back to update client screens. The README describes registration and lobby flows, while sampled source confirms the server dispatch, state changes, and client response handling. Some screen and button-listener implementations were not sampled, so their specific request wiring is represented only where documentation supports it.

Main entry points: [`core/src/main/java/ee/taltech/game/network/ClientLauncher.java`](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/network/ClientLauncher.java) (Client transport), [`server/src/main/java/ee/taltech/game/server/ServerLauncher.java`](https://github.com/fyberov-dev/lobby-system-2/blob/main/server/src/main/java/ee/taltech/game/server/ServerLauncher.java) (Server transport), [`core/src/main/java/ee/taltech/game/Main.java`](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/Main.java) (Game state), [`server/src/main/java/ee/taltech/game/server/system/Game.java`](https://github.com/fyberov-dev/lobby-system-2/blob/main/server/src/main/java/ee/taltech/game/server/system/Game.java) (Lobby operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Game client"]
  node_main["Game state<br/>[Main.java]"]
  node_registration["Registration screen<br/>[MainScreen.java]"]
  node_lobbylist["Lobby list screen"]
  node_lobbyscreen["Lobby screen<br/>[LobbyScreen.java]"]
  node_actions["Lobby actions"]
  node_clientlistener["Response handler"]
  node_screenrun["Screen dispatch"]
  node_clientnet["Client transport"]
end

subgraph group_server["Lobby server"]
  node_servernet["Server transport"]
  node_serverlistener["Request handler"]
  node_game["Lobby operations<br/>[Game.java]"]
end

subgraph group_shared["Shared protocol"]
  node_lobbymodel["Lobby model<br/>[Lobby.java]"]
  node_playermodel["Player model<br/>[Player.java]"]
  node_packets["Network packets"]
  node_serialization["Kryo registration<br/>[KryoHelper.java]"]
end

subgraph group_runtime["Runtime entrypoints"]
  node_desktop["Desktop launcher"]
end

node_player(("Player"))

node_player -->|"registers"| node_registration
node_main -->|"shows"| node_registration
node_registration -->|"starts registration"| node_actions
node_lobbylist -->|"offers lobby actions"| node_actions
node_lobbyscreen -->|"offers leave"| node_actions
node_actions -->|"sends requests"| node_clientnet
node_clientnet -->|"exchanges packets"| node_servernet
node_servernet -->|"dispatches requests"| node_serverlistener
node_serverlistener -->|"invokes operations"| node_game
node_game -->|"updates lobby"| node_lobbymodel
node_game -->|"creates players"| node_playermodel
node_game -->|"sends responses"| node_servernet
node_clientnet -->|"delivers responses"| node_clientlistener
node_clientlistener -->|"updates game state"| node_main
node_main -->|"schedules screen changes"| node_screenrun
node_screenrun -->|"sets screen"| node_main
node_clientnet -->|"registers types"| node_serialization
node_servernet -->|"registers types"| node_serialization
node_clientnet -->|"transfers"| node_packets
node_servernet -->|"transfers"| node_packets
node_desktop -->|"launches"| node_main

click node_main "https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/Main.java"
click node_registration "https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/screen/MainScreen.java"
click node_lobbylist "https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/screen/LobbiesListScreen.java"
click node_lobbyscreen "https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/screen/LobbyScreen.java"
click node_actions "https://github.com/fyberov-dev/lobby-system-2/tree/main/core/src/main/java/ee/taltech/game/listener/button"
click node_clientlistener "https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/listener/ClientListener.java"
click node_screenrun "https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/runnable/SetScreenRunnable.java"
click node_clientnet "https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/network/ClientLauncher.java"
click node_servernet "https://github.com/fyberov-dev/lobby-system-2/blob/main/server/src/main/java/ee/taltech/game/server/ServerLauncher.java"
click node_serverlistener "https://github.com/fyberov-dev/lobby-system-2/blob/main/server/src/main/java/ee/taltech/game/server/listener/ServerListener.java"
click node_game "https://github.com/fyberov-dev/lobby-system-2/blob/main/server/src/main/java/ee/taltech/game/server/system/Game.java"
click node_lobbymodel "https://github.com/fyberov-dev/lobby-system-2/blob/main/shared/src/main/java/ee/taltech/game/shared/lobby/Lobby.java"
click node_playermodel "https://github.com/fyberov-dev/lobby-system-2/blob/main/shared/src/main/java/ee/taltech/game/shared/player/Player.java"
click node_packets "https://github.com/fyberov-dev/lobby-system-2/tree/main/shared/src/main/java/ee/taltech/game/shared/packet"
click node_serialization "https://github.com/fyberov-dev/lobby-system-2/blob/main/shared/src/main/java/ee/taltech/game/shared/util/KryoHelper.java"
click node_desktop "https://github.com/fyberov-dev/lobby-system-2/blob/main/lwjgl3/src/main/java/ee/taltech/game/lwjgl3/Lwjgl3Launcher.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_main,node_registration,node_lobbylist,node_lobbyscreen,node_actions,node_clientlistener,node_screenrun,node_clientnet toneBlue
class node_servernet,node_serverlistener,node_game toneAmber
class node_lobbymodel,node_playermodel,node_packets,node_serialization toneMint
class node_desktop toneRose
class node_player toneIndigo
```

## Components

### Game client

- [Game state](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/Main.java): `core/src/main/java/ee/taltech/game/Main.java`
- [Registration screen](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/screen/MainScreen.java): `core/src/main/java/ee/taltech/game/screen/MainScreen.java`
- [Lobby list screen](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/screen/LobbiesListScreen.java): `core/src/main/java/ee/taltech/game/screen/LobbiesListScreen.java`
- [Lobby screen](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/screen/LobbyScreen.java): `core/src/main/java/ee/taltech/game/screen/LobbyScreen.java`
- [Lobby actions](https://github.com/fyberov-dev/lobby-system-2/tree/main/core/src/main/java/ee/taltech/game/listener/button): `core/src/main/java/ee/taltech/game/listener/button`
- [Response handler](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/listener/ClientListener.java): `core/src/main/java/ee/taltech/game/listener/ClientListener.java`
- [Screen dispatch](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/runnable/SetScreenRunnable.java): `core/src/main/java/ee/taltech/game/runnable/SetScreenRunnable.java`
- [Client transport](https://github.com/fyberov-dev/lobby-system-2/blob/main/core/src/main/java/ee/taltech/game/network/ClientLauncher.java): `core/src/main/java/ee/taltech/game/network/ClientLauncher.java`

### Lobby server

- [Server transport](https://github.com/fyberov-dev/lobby-system-2/blob/main/server/src/main/java/ee/taltech/game/server/ServerLauncher.java): `server/src/main/java/ee/taltech/game/server/ServerLauncher.java`
- [Request handler](https://github.com/fyberov-dev/lobby-system-2/blob/main/server/src/main/java/ee/taltech/game/server/listener/ServerListener.java): `server/src/main/java/ee/taltech/game/server/listener/ServerListener.java`
- [Lobby operations](https://github.com/fyberov-dev/lobby-system-2/blob/main/server/src/main/java/ee/taltech/game/server/system/Game.java): `server/src/main/java/ee/taltech/game/server/system/Game.java`

### Shared protocol

- [Lobby model](https://github.com/fyberov-dev/lobby-system-2/blob/main/shared/src/main/java/ee/taltech/game/shared/lobby/Lobby.java): `shared/src/main/java/ee/taltech/game/shared/lobby/Lobby.java`
- [Player model](https://github.com/fyberov-dev/lobby-system-2/blob/main/shared/src/main/java/ee/taltech/game/shared/player/Player.java): `shared/src/main/java/ee/taltech/game/shared/player/Player.java`
- [Network packets](https://github.com/fyberov-dev/lobby-system-2/tree/main/shared/src/main/java/ee/taltech/game/shared/packet): `shared/src/main/java/ee/taltech/game/shared/packet`
- [Kryo registration](https://github.com/fyberov-dev/lobby-system-2/blob/main/shared/src/main/java/ee/taltech/game/shared/util/KryoHelper.java): `shared/src/main/java/ee/taltech/game/shared/util/KryoHelper.java`

### Runtime entrypoints

- [Desktop launcher](https://github.com/fyberov-dev/lobby-system-2/blob/main/lwjgl3/src/main/java/ee/taltech/game/lwjgl3/Lwjgl3Launcher.java): `lwjgl3/src/main/java/ee/taltech/game/lwjgl3/Lwjgl3Launcher.java`

### Other components

- **Player**

## Connections

- Player → Registration screen: registers
- Game state → Registration screen: shows
- Registration screen → Lobby actions: starts registration
- Lobby list screen → Lobby actions: offers lobby actions
- Lobby screen → Lobby actions: offers leave
- Lobby actions → Client transport: sends requests
- Client transport → Server transport: exchanges packets
- Server transport → Request handler: dispatches requests
- Request handler → Lobby operations: invokes operations
- Lobby operations → Lobby model: updates lobby
- Lobby operations → Player model: creates players
- Lobby operations → Server transport: sends responses
- Client transport → Response handler: delivers responses
- Response handler → Game state: updates game state
- Game state → Screen dispatch: schedules screen changes
- Screen dispatch → Game state: sets screen
- Client transport → Kryo registration: registers types
- Server transport → Kryo registration: registers types
- Client transport → Network packets: transfers
- Server transport → Network packets: transfers
- Desktop launcher → Game state: launches
