diff --git a/doc/multithread_maze_server.md b/doc/multithread_maze_server.md new file mode 100644 index 0000000..4548a34 --- /dev/null +++ b/doc/multithread_maze_server.md @@ -0,0 +1,46 @@ +# Реализация сетевого серверного приложения "Лабиринт" на основе многопоточности +При подключении клиента сервер порождает новый поток для работы с этим клиентом. + +## Протокол пользовательского уровня +UML-диаграмма протокола пользовательского уровня представлена на рисунке ниже. +![UML-диаграмма протокола пользовательского уровня](echo-protocol.svg) + +## Описание работы приложения +Сервер maze-server ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). +После установки соединения сервер ожидает получения имени игрока от клиента и запускает игровую сессию. +Каждому игроку предоставляется ограниченное количество ходов для прохождения случайного лабиринта. Игрок может перемещаться в четырёх направлениях: вперёд, назад, направо, налево. Сервер проверяет возможность перемещения и сообщает игроку о результате действия. +Игрок побеждает, если достигает конечной позиции (нода 8) за отведённое число шагов. В противном случае он проигрывает. + +### Запуск сервера +Приложение сервера при запуске принимает следующие необязательные ключи: + +- `-h` — задаёт имя хоста, к которому будет привязан сокет; +- `-p` — задаёт номер порта для прослушивания; +- `-n` — задаёт максимальное количество шагов, разрешённое для одного игрока; +- `-s` — включает сервисный режим (без ограничений по количеству шагов). + +```bash +./maze-server -h localhost -p 1024 -n 10 -s +``` +По умолчанию сокет сервера связывается с адресом `localhost:1024`, игрокам разрешено 10 шагов, сервисный режим выключен. +Завершения работы сервера — `Ctrl+C`. + +Клиент подключается к серверу, отправляет своё имя и получает интерактивную игру в лабиринт. +Поддерживаемые команды: +- `вперёд` — перемещение вверх; +- `направо` — перемещение вправо; +- `налево` — перемещение влево; +- `назад` — перемещение вниз; +- `cдаюсь` — завершение игры досрочно. + + +Если игрок исчерпал все ходы, но не дошёл до финиша, он считается проигравшим. Финиш находится в позиции (2, 2) (координаты x, y). + +### Запуск клиента +Приложение клиента при запуске принимает три необязательных ключа `-h`, `-p`  и `-n` с параметрами. +Ключи `-h` и `-p` задают сетевой адрес (название хоста и номер порта соответственно) сервера для подключения. +```bash +./maze_client -h localhost -p 1024 +``` +По умолчанию клиент пытается подключиться к адресу `localhost:1024`. +