Multithread maze server description (without UML)

Fix link in README file
This commit is contained in:
ParkSuMin committed 2025-04-30 21:38:30 +03:00
1 parent 4402bbfe3f
commit 8823945938
3 files changed
+17 -7

No files matched your search

+1 -1
View File
@@ -12,7 +12,7 @@
Клиент должен работать по разработанному сетевому протоколу. Клиент должен работать по разработанному сетевому протоколу.
## Разработанное приложение ## Разработанное приложение
Реализация [сервера на основе многопоточности](doc/multiprocess_echo_server.md) и клиента эхо-приложения. Реализация [сервера на основе многопоточности](doc/multithread_maze_server.md) и клиента эхо-приложения.
## Требования ## Требования
Для сборки и запуска необходима Unix-система и компилятор C++ с поддержкой стандарта c++23. Для сборки и запуска необходима Unix-система и компилятор C++ с поддержкой стандарта c++23.
+12 -6
View File
@@ -6,10 +6,14 @@ UML-диаграмма протокола пользовательского у
![UML-диаграмма протокола пользовательского уровня](echo-protocol.svg) ![UML-диаграмма протокола пользовательского уровня](echo-protocol.svg)
## Описание работы приложения ## Описание работы приложения
Сервер maze-server ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). Сервер `maze-server` ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). После установления соединения сервер запрашивает имя игрока, а затем начинает игру в лабиринте. Лабиринт генерируется случайным образом при старте каждой новой игровой сессии. Гарантируется наличие хотя бы одного пути из начальной точки `(0, 0)` в конечную точку `(2, 2)`. Добавление дополнительных стен происходит с соблюдением условия достижимости цели.
После установки соединения сервер ожидает получения имени игрока от клиента и запускает игровую сессию.
Каждому игроку предоставляется ограниченное количество ходов для прохождения случайного лабиринта. Игрок может перемещаться в четырёх направлениях: вперёд, назад, направо, налево. Сервер проверяет возможность перемещения и сообщает игроку о результате действия. Cхема и нумерация клеток лабиринта представлена на рисунке ниже.
Игрок побеждает, если достигает конечной позиции (нода 8) за отведённое число шагов. В противном случае он проигрывает.
![Схема лабиринта](maze_numeration.svg)
Клиент отправляет команды движения ("вперёд", "направо", "налево", "назад") или команду "сдаюсь" для завершения игры. Сервер обрабатывает команды, проверяет возможность хода, обновляет состояние лабиринта и отправляет клиенту текстовый ответ с результатом хода, количеством оставшихся ходов и текущей позицией (в формате координат). Игра завершается, если игрок достигает конечной точки (позиция 8), исчерпывает ходы или сдаётся.
### Запуск сервера ### Запуск сервера
Приложение сервера при запуске принимает следующие необязательные ключи: Приложение сервера при запуске принимает следующие необязательные ключи:
@@ -37,8 +41,10 @@ UML-диаграмма протокола пользовательского у
Если игрок исчерпал все ходы, но не дошёл до финиша, он считается проигравшим. Финиш находится в позиции (2, 2) (координаты x, y). Если игрок исчерпал все ходы, но не дошёл до финиша, он считается проигравшим. Финиш находится в позиции (2, 2) (координаты x, y).
### Запуск клиента ### Запуск клиента
Приложение клиента при запуске принимает три необязательных ключа `-h`, `-p`  и `-n` с параметрами. Приложение клиента при запуске принимает два необязательных ключа:
Ключи `-h` и `-p` задают сетевой адрес (название хоста и номер порта соответственно) сервера для подключения. - `-h` — задаёт имя хоста сервера для подключения;
- `-p` — задаёт номер порта сервера.
```bash ```bash
./maze_client -h localhost -p 1024 ./maze_client -h localhost -p 1024
``` ```
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file with editors other than draw.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" style="background: #ffffff; background-color: #ffffff; color-scheme: light;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="181px" height="141px" viewBox="-0.5 -0.5 181 141" content="&lt;mxfile host=&quot;app.diagrams.net&quot; agent=&quot;Mozilla/5.0 (X11; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0&quot; version=&quot;26.2.14&quot; scale=&quot;1&quot; border=&quot;0&quot;&gt;&#xA; &lt;diagram name=&quot;Page-1&quot; id=&quot;4dH0ZVNng5iTURC5q5_l&quot;&gt;&#xA; &lt;mxGraphModel dx=&quot;946&quot; dy=&quot;646&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;850&quot; pageHeight=&quot;1100&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#xA; &lt;root&gt;&#xA; &lt;mxCell id=&quot;0&quot; /&gt;&#xA; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#xA; &lt;mxCell id=&quot;PpjUVarXfEZTr97tMgvP-1&quot; value=&quot;&quot; style=&quot;childLayout=tableLayout;recursiveResize=0;shadow=0;fillColor=none;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#xA; &lt;mxGeometry x=&quot;340&quot; y=&quot;270&quot; width=&quot;180&quot; height=&quot;140&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;PpjUVarXfEZTr97tMgvP-2&quot; value=&quot;&quot; style=&quot;shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;dropTarget=0;collapsible=0;recursiveResize=0;expand=0;fontStyle=0;fillColor=none;strokeColor=inherit;&quot; vertex=&quot;1&quot; parent=&quot;PpjUVarXfEZTr97tMgvP-1&quot;&gt;&#xA; &lt;mxGeometry width=&quot;180&quot; height=&quot;47&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;PpjUVarXfEZTr97tMgvP-3&quot; value=&quot;6&quot; style=&quot;connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;&quot; vertex=&quot;1&quot; parent=&quot;PpjUVarXfEZTr97tMgvP-2&quot;&gt;&#xA; &lt;mxGeometry width=&quot;60&quot; height=&quot;47&quot; as=&quot;geometry&quot;&gt;&#xA; &lt;mxRectangle width=&quot;60&quot; height=&quot;47&quot; as=&quot;alternateBounds&quot; /&gt;&#xA; &lt;/mxGeometry&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;PpjUVarXfEZTr97tMgvP-4&quot; value=&quot;7&quot; style=&quot;connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;&quot; vertex=&quot;1&quot; parent=&quot;PpjUVarXfEZTr97tMgvP-2&quot;&gt;&#xA; &lt;mxGeometry x=&quot;60&quot; width=&quot;60&quot; height=&quot;47&quot; as=&quot;geometry&quot;&gt;&#xA; &lt;mxRectangle width=&quot;60&quot; height=&quot;47&quot; as=&quot;alternateBounds&quot; /&gt;&#xA; &lt;/mxGeometry&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;PpjUVarXfEZTr97tMgvP-5&quot; value=&quot;8&quot; style=&quot;connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;&quot; vertex=&quot;1&quot; parent=&quot;PpjUVarXfEZTr97tMgvP-2&quot;&gt;&#xA; &lt;mxGeometry x=&quot;120&quot; width=&quot;60&quot; height=&quot;47&quot; as=&quot;geometry&quot;&gt;&#xA; &lt;mxRectangle width=&quot;60&quot; height=&quot;47&quot; as=&quot;alternateBounds&quot; /&gt;&#xA; &lt;/mxGeometry&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;PpjUVarXfEZTr97tMgvP-6&quot; style=&quot;shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;dropTarget=0;collapsible=0;recursiveResize=0;expand=0;fontStyle=0;fillColor=none;strokeColor=inherit;&quot; vertex=&quot;1&quot; parent=&quot;PpjUVarXfEZTr97tMgvP-1&quot;&gt;&#xA; &lt;mxGeometry y=&quot;47&quot; width=&quot;180&quot; height=&quot;46&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;PpjUVarXfEZTr97tMgvP-7&quot; value=&quot;3&quot; style=&quot;connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;&quot; vertex=&quot;1&quot; parent=&quot;PpjUVarXfEZTr97tMgvP-6&quot;&gt;&#xA; &lt;mxGeometry width=&quot;60&quot; height=&quot;46&quot; as=&quot;geometry&quot;&gt;&#xA; &lt;mxRectangle width=&quot;60&quot; height=&quot;46&quot; as=&quot;alternateBounds&quot; /&gt;&#xA; &lt;/mxGeometry&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;PpjUVarXfEZTr97tMgvP-8&quot; value=&quot;4&quot; style=&quot;connectable=0;recursiveResize=0;strokeColor=inherit;fillColor=none;align=center;whiteSpace=wrap;html=1;&quot; vertex=&quot;1&quot; parent=&quot;PpjUVarXfEZTr97tMgvP-6&quot;&gt;&#xA; &lt;mxGeometry x=&quot;60&quot; width=&quot;60&quot; height=&quot;46&quot; as=&quot;geometry&quot;&gt;&#xA; Line truncated

After

Width:  |  Height:  |  Size: 29 KiB