v0.2.0 transitioned to api-only, extended and improved features, docs and tests added
This commit is contained in:
61
doc/architecture.md
Normal file
61
doc/architecture.md
Normal file
@ -0,0 +1,61 @@
|
||||
# Architecture
|
||||
|
||||
## Components
|
||||
|
||||
### Transport Layer (`internal/http`)
|
||||
Fiber web server handling HTTP requests/responses. Implements routing, rate limiting, content-type validation, request parsing. Translates HTTP to internal Command objects.
|
||||
|
||||
### Processing Layer (`internal/processor`)
|
||||
Central command handler containing business logic. Single `Execute(Command)` entry point decouples transport from logic. Uses synchronous UCI engine for validation, asynchronous EngineQueue for computer moves.
|
||||
|
||||
### Service Layer (`internal/service`)
|
||||
In-memory state storage without chess logic. Thread-safe game map protected by RWMutex. Manages game lifecycle, snapshots, and player configuration.
|
||||
|
||||
### Supporting Modules
|
||||
- **Engine** (`internal/engine`): UCI protocol wrapper for Stockfish process communication
|
||||
- **Game** (`internal/game`): Game state with snapshot history
|
||||
- **Board** (`internal/board`): FEN parsing and ASCII generation
|
||||
- **Core** (`internal/core`): Shared types, API models, error constants
|
||||
|
||||
## Request Flow
|
||||
|
||||
### Human Move
|
||||
1. HTTP handler receives `POST /games/{id}/moves` with UCI move
|
||||
2. Creates MakeMoveCommand, calls `processor.Execute()`
|
||||
3. Processor validates move via locked validation engine
|
||||
4. If legal, gets new FEN from engine
|
||||
5. Calls `service.ApplyMove()` to update state
|
||||
6. Returns GameResponse
|
||||
|
||||
### Computer Move
|
||||
1. HTTP handler receives `POST /games/{id}/moves` with `{"move": "cccc"}`
|
||||
2. Processor sets game state to `pending`
|
||||
3. Submits task to EngineQueue, returns immediately
|
||||
4. Worker goroutine calculates move with dedicated Stockfish instance
|
||||
5. Callback updates game state via service
|
||||
6. Client polls for completion
|
||||
|
||||
## Concurrency
|
||||
|
||||
- **HTTP Server**: Fiber handles concurrent connections
|
||||
- **Game State**: Single RWMutex protects game map (concurrent reads, serial writes)
|
||||
- **Engine Workers**: Fixed pool (2 workers) with dedicated Stockfish processes
|
||||
- **Validation Engine**: Single mutex-protected instance for synchronous validation
|
||||
|
||||
## Data Structures
|
||||
|
||||
### Game Snapshot
|
||||
```go
|
||||
type Snapshot struct {
|
||||
FEN string
|
||||
PreviousMove string
|
||||
NextTurnColor Color
|
||||
PlayerID string
|
||||
}
|
||||
```
|
||||
|
||||
### Command Pattern
|
||||
Commands encapsulate operations with type and arguments, processed by single Execute method.
|
||||
|
||||
### Player Configuration
|
||||
Players identified by UUID, configured with type (human/computer), skill level, and search time.
|
||||
Reference in New Issue
Block a user