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