# llr104/slgserver architecture

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

## Overview

This repository is a multi-process strategy-game server. A client connects through the gateway, which the README describes as forwarding client messages to login, chat, and game services; account APIs are also exposed by the HTTP service. In the game service, requests cover role and city management, armies, the world map, combat, skills, and alliances, with chat handled separately. MySQL provides persistent storage. The tree and excerpts establish these subsystems, but do not show every service’s route registrations or all controller-to-logic calls, so uncertain wiring is omitted.

Main entry points: [`net/server.go`](https://github.com/llr104/slgserver/blob/main/net/server.go) (WebSocket server), [`net/proxyClient.go`](https://github.com/llr104/slgserver/blob/main/net/proxyClient.go) (Service proxy), [`server/slgserver/controller/army.go`](https://github.com/llr104/slgserver/blob/main/server/slgserver/controller/army.go) (Game controllers), [`main/gateserver.go`](https://github.com/llr104/slgserver/blob/main/main/gateserver.go) (Gateway service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Service entrypoints"]
  node_http["HTTP service<br/>[httpserver.go]"]
  node_gateway["Gateway service<br/>[gateserver.go]"]
  node_login["Login service<br/>[loginserver.go]"]
  node_chat["Chat service<br/>[chatserver.go]"]
  node_slg["Game service<br/>[slgserver.go]"]
end

subgraph group_transport["Messaging transport"]
  node_wsserver["WebSocket server<br/>[server.go]"]
  node_routing["Message routing<br/>[router.go]"]
  node_proxy["Service proxy<br/>[proxyClient.go]"]
end

subgraph group_accounts["Accounts"]
  node_account_api["Account API<br/>[account.go]"]
  node_account_logic["Account logic<br/>[account.go]"]
  node_login_api["Login controller<br/>[account.go]"]
  node_login_model["Login model<br/>[login.go]"]
end

subgraph group_game["Game service"]
  node_chat_api["Chat controller<br/>[chat.go]"]
  node_chat_logic["Chat queue<br/>[queue.go]"]
  node_game_api["Game controllers<br/>[army.go]"]
  node_game_logic["Game logic<br/>[army_logic.go]"]
  node_alliance["Alliance logic<br/>[union_logic.go]"]
end

subgraph group_state["State and storage"]
  node_game_models["Game models<br/>[army.go]"]
  node_managers["State managers<br/>[army_mgr.go]"]
  node_database[("MySQL database")]
  node_db_conn["Database connection<br/>[conn.go]"]
end

node_player(("Game client"))

node_player -->|"sends messages"| node_gateway
node_player -->|"calls APIs"| node_http
node_gateway -->|"serves connections"| node_wsserver
node_login -->|"serves connections"| node_wsserver
node_chat -->|"serves connections"| node_wsserver
node_slg -->|"serves connections"| node_wsserver
node_wsserver -->|"dispatches messages"| node_routing
node_gateway -->|"forwards messages"| node_proxy
node_proxy -->|"connects services"| node_login
node_proxy -->|"connects services"| node_chat
node_proxy -->|"connects services"| node_slg
node_http -->|"serves requests"| node_account_api
node_account_api -->|"calls logic"| node_account_logic
node_login -->|"serves requests"| node_login_api
node_login_api -->|"uses model"| node_login_model
node_chat -->|"handles chat"| node_chat_api
node_chat_api -->|"uses queue"| node_chat_logic
node_slg -->|"handles game requests"| node_game_api
node_game_api -->|"calls logic"| node_game_logic
node_game_api -->|"uses alliance logic"| node_alliance
node_game_api -->|"reads game state"| node_managers
node_game_logic -->|"uses managers"| node_managers
node_managers -->|"manages entities"| node_game_models
node_db_conn -->|"opens connection"| node_database
node_game_models -->|"persists state"| node_database
node_login_model -->|"persists accounts"| node_database

click node_http "https://github.com/llr104/slgserver/blob/main/main/httpserver.go"
click node_gateway "https://github.com/llr104/slgserver/blob/main/main/gateserver.go"
click node_login "https://github.com/llr104/slgserver/blob/main/main/loginserver.go"
click node_chat "https://github.com/llr104/slgserver/blob/main/main/chatserver.go"
click node_slg "https://github.com/llr104/slgserver/blob/main/main/slgserver.go"
click node_wsserver "https://github.com/llr104/slgserver/blob/main/net/server.go"
click node_routing "https://github.com/llr104/slgserver/blob/main/net/router.go"
click node_proxy "https://github.com/llr104/slgserver/blob/main/net/proxyClient.go"
click node_account_api "https://github.com/llr104/slgserver/blob/main/server/httpserver/controller/account.go"
click node_account_logic "https://github.com/llr104/slgserver/blob/main/server/httpserver/logic/account.go"
click node_login_api "https://github.com/llr104/slgserver/blob/main/server/loginserver/controller/account.go"
click node_login_model "https://github.com/llr104/slgserver/blob/main/server/loginserver/model/login.go"
click node_chat_api "https://github.com/llr104/slgserver/blob/main/server/chatserver/controller/chat.go"
click node_chat_logic "https://github.com/llr104/slgserver/blob/main/server/chatserver/logic/queue.go"
click node_game_api "https://github.com/llr104/slgserver/blob/main/server/slgserver/controller/army.go"
click node_game_logic "https://github.com/llr104/slgserver/blob/main/server/slgserver/logic/army/army_logic.go"
click node_alliance "https://github.com/llr104/slgserver/blob/main/server/slgserver/logic/union/union_logic.go"
click node_game_models "https://github.com/llr104/slgserver/blob/main/server/slgserver/model/army.go"
click node_managers "https://github.com/llr104/slgserver/blob/main/server/slgserver/logic/mgr/army_mgr.go"
click node_db_conn "https://github.com/llr104/slgserver/blob/main/db/conn.go"

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_http,node_gateway,node_login,node_chat,node_slg,node_player toneBlue
class node_wsserver,node_routing,node_proxy toneAmber
class node_account_api,node_account_logic,node_login_api,node_login_model toneMint
class node_chat_api,node_chat_logic,node_game_api,node_game_logic,node_alliance toneRose
class node_game_models,node_managers,node_database,node_db_conn toneIndigo
```

## Components

### Service entrypoints

- [HTTP service](https://github.com/llr104/slgserver/blob/main/main/httpserver.go): `main/httpserver.go`
- [Gateway service](https://github.com/llr104/slgserver/blob/main/main/gateserver.go): `main/gateserver.go`
- [Login service](https://github.com/llr104/slgserver/blob/main/main/loginserver.go): `main/loginserver.go`
- [Chat service](https://github.com/llr104/slgserver/blob/main/main/chatserver.go): `main/chatserver.go`
- [Game service](https://github.com/llr104/slgserver/blob/main/main/slgserver.go): `main/slgserver.go`

### Messaging transport

- [WebSocket server](https://github.com/llr104/slgserver/blob/main/net/server.go): `net/server.go`
- [Message routing](https://github.com/llr104/slgserver/blob/main/net/router.go): `net/router.go`
- [Service proxy](https://github.com/llr104/slgserver/blob/main/net/proxyClient.go): `net/proxyClient.go`

### Accounts

- [Account API](https://github.com/llr104/slgserver/blob/main/server/httpserver/controller/account.go): `server/httpserver/controller/account.go`
- [Account logic](https://github.com/llr104/slgserver/blob/main/server/httpserver/logic/account.go): `server/httpserver/logic/account.go`
- [Login controller](https://github.com/llr104/slgserver/blob/main/server/loginserver/controller/account.go): `server/loginserver/controller/account.go`
- [Login model](https://github.com/llr104/slgserver/blob/main/server/loginserver/model/login.go): `server/loginserver/model/login.go`

### Game service

- [Chat controller](https://github.com/llr104/slgserver/blob/main/server/chatserver/controller/chat.go): `server/chatserver/controller/chat.go`
- [Chat queue](https://github.com/llr104/slgserver/blob/main/server/chatserver/logic/queue.go): `server/chatserver/logic/queue.go`
- [Game controllers](https://github.com/llr104/slgserver/blob/main/server/slgserver/controller/army.go): `server/slgserver/controller/army.go`
- [Game logic](https://github.com/llr104/slgserver/blob/main/server/slgserver/logic/army/army_logic.go): `server/slgserver/logic/army/army_logic.go`
- [Alliance logic](https://github.com/llr104/slgserver/blob/main/server/slgserver/logic/union/union_logic.go): `server/slgserver/logic/union/union_logic.go`

### State and storage

- [Game models](https://github.com/llr104/slgserver/blob/main/server/slgserver/model/army.go): `server/slgserver/model/army.go`
- [State managers](https://github.com/llr104/slgserver/blob/main/server/slgserver/logic/mgr/army_mgr.go): `server/slgserver/logic/mgr/army_mgr.go`
- **MySQL database**
- [Database connection](https://github.com/llr104/slgserver/blob/main/db/conn.go): `db/conn.go`

### Other components

- **Game client**

## Connections

- Game client → Gateway service: sends messages
- Game client → HTTP service: calls APIs
- Gateway service → WebSocket server: serves connections
- Login service → WebSocket server: serves connections
- Chat service → WebSocket server: serves connections
- Game service → WebSocket server: serves connections
- WebSocket server → Message routing: dispatches messages
- Gateway service → Service proxy: forwards messages
- Service proxy → Login service: connects services
- Service proxy → Chat service: connects services
- Service proxy → Game service: connects services
- HTTP service → Account API: serves requests
- Account API → Account logic: calls logic
- Login service → Login controller: serves requests
- Login controller → Login model: uses model
- Chat service → Chat controller: handles chat
- Chat controller → Chat queue: uses queue
- Game service → Game controllers: handles game requests
- Game controllers → Game logic: calls logic
- Game controllers → Alliance logic: uses alliance logic
- Game controllers → State managers: reads game state
- Game logic → State managers: uses managers
- State managers → Game models: manages entities
- Database connection → MySQL database: opens connection
- Game models → MySQL database: persists state
- Login model → MySQL database: persists accounts
