# gbalog/rooks_dance architecture

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

## Overview

Это консольная симуляция одновременных ходов 4–6 ладей. Пользователь задаёт число фигур и может отключить доску; главный поток запускает менеджер, который создаёт потоки ладей. Каждая ладья выбирает цель, делает попытки хода и сообщает менеджеру о ходе, таймауте или завершении. Менеджер синхронизирует поле, обрабатывает очереди сообщений, выводит события и обновляет доску до завершения всех ладей. Поведение подтверждено README и просмотренными исходниками; отдельные связи не показаны там, где вызовы не подтверждены.

Main entry points: [`src/BoardManager.cpp`](https://github.com/gbalog/rooks_dance/blob/master/src/BoardManager.cpp) (Менеджер доски), [`src/RookHandler.cpp`](https://github.com/gbalog/rooks_dance/blob/master/src/RookHandler.cpp) (Потоки ладей), [`src/ConcurrentQueue.h`](https://github.com/gbalog/rooks_dance/blob/master/src/ConcurrentQueue.h) (Очереди сообщений), [`src/main.cpp`](https://github.com/gbalog/rooks_dance/blob/master/src/main.cpp) (CLI и запуск)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Запуск"]
  node_main["CLI и запуск<br/>[main.cpp]"]
end

subgraph group_simulation["Симуляция"]
  node_manager["Менеджер доски<br/>[BoardManager.cpp]"]
  node_handlers["Потоки ладей<br/>[RookHandler.cpp]"]
  node_field[("Состояние доски<br/>[BoardManager.h]")]
end

subgraph group_coordination["Координация"]
  node_queue["Очереди сообщений<br/>[ConcurrentQueue.h]"]
  node_logtypes["Типы событий<br/>[LogMessages.h]"]
end

subgraph group_output["Вывод"]
  node_drawer["Отрисовка поля<br/>[FieldDrawer.h]"]
end

node_user(("Пользователь"))
node_console(("Консоль"))

node_user -->|"задаёт параметры"| node_main
node_main -->|"запускает"| node_manager
node_manager -->|"создаёт потоки"| node_handlers
node_handlers -->|"запрашивают ход"| node_manager
node_handlers -->|"сообщают события"| node_manager
node_manager -->|"проверяет и меняет"| node_field
node_manager -->|"помещает события"| node_queue
node_manager -->|"извлекает события"| node_queue
node_manager -->|"ставит завершившиеся потоки"| node_queue
node_manager -->|"передаёт снимок"| node_drawer
node_manager -->|"выводит события"| node_console
node_drawer -->|"рисует поле"| node_console

click node_main "https://github.com/gbalog/rooks_dance/blob/master/src/main.cpp"
click node_manager "https://github.com/gbalog/rooks_dance/blob/master/src/BoardManager.cpp"
click node_handlers "https://github.com/gbalog/rooks_dance/blob/master/src/RookHandler.cpp"
click node_field "https://github.com/gbalog/rooks_dance/blob/master/src/BoardManager.h"
click node_queue "https://github.com/gbalog/rooks_dance/blob/master/src/ConcurrentQueue.h"
click node_logtypes "https://github.com/gbalog/rooks_dance/blob/master/src/LogMessages.h"
click node_drawer "https://github.com/gbalog/rooks_dance/blob/master/src/FieldDrawer.h"

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 toneBlue
class node_manager,node_handlers,node_field toneAmber
class node_queue,node_logtypes toneMint
class node_drawer toneRose
class node_user,node_console toneIndigo
```

## Components

### Запуск

- [CLI и запуск](https://github.com/gbalog/rooks_dance/blob/master/src/main.cpp): `src/main.cpp`

### Симуляция

- [Менеджер доски](https://github.com/gbalog/rooks_dance/blob/master/src/BoardManager.cpp): `src/BoardManager.cpp`
- [Потоки ладей](https://github.com/gbalog/rooks_dance/blob/master/src/RookHandler.cpp): `src/RookHandler.cpp`
- [Состояние доски](https://github.com/gbalog/rooks_dance/blob/master/src/BoardManager.h): `src/BoardManager.h`

### Координация

- [Очереди сообщений](https://github.com/gbalog/rooks_dance/blob/master/src/ConcurrentQueue.h): `src/ConcurrentQueue.h`
- [Типы событий](https://github.com/gbalog/rooks_dance/blob/master/src/LogMessages.h): `src/LogMessages.h`

### Вывод

- [Отрисовка поля](https://github.com/gbalog/rooks_dance/blob/master/src/FieldDrawer.h): `src/FieldDrawer.h`

### Other components

- **Пользователь**
- **Консоль**

## Connections

- Пользователь → CLI и запуск: задаёт параметры
- CLI и запуск → Менеджер доски: запускает
- Менеджер доски → Потоки ладей: создаёт потоки
- Потоки ладей → Менеджер доски: запрашивают ход
- Потоки ладей → Менеджер доски: сообщают события
- Менеджер доски → Состояние доски: проверяет и меняет
- Менеджер доски → Очереди сообщений: помещает события
- Менеджер доски → Очереди сообщений: извлекает события
- Менеджер доски → Очереди сообщений: ставит завершившиеся потоки
- Менеджер доски → Отрисовка поля: передаёт снимок
- Менеджер доски → Консоль: выводит события
- Отрисовка поля → Консоль: рисует поле
