Files
Maze/doc/multithread_maze_server.md

47 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Реализация сетевого серверного приложения "Лабиринт" на основе многопоточности
При подключении клиента сервер порождает новый поток для работы с этим клиентом.
## Протокол пользовательского уровня
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`.