Files
Maze/doc/multithread_maze_server.md

3.9 KiB
Raw Blame History

Реализация сетевого серверного приложения "Лабиринт" на основе многопоточности

При подключении клиента сервер порождает новый поток для работы с этим клиентом.

Протокол пользовательского уровня

UML-диаграмма протокола пользовательского уровня представлена на рисунке ниже. UML-диаграмма протокола пользовательского уровня

Описание работы приложения

Сервер maze-server ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). После установки соединения сервер ожидает получения имени игрока от клиента и запускает игровую сессию. Каждому игроку предоставляется ограниченное количество ходов для прохождения случайного лабиринта. Игрок может перемещаться в четырёх направлениях: вперёд, назад, направо, налево. Сервер проверяет возможность перемещения и сообщает игроку о результате действия. Игрок побеждает, если достигает конечной позиции (нода 8) за отведённое число шагов. В противном случае он проигрывает.

Запуск сервера

Приложение сервера при запуске принимает следующие необязательные ключи:

  • -h — задаёт имя хоста, к которому будет привязан сокет;
  • -p — задаёт номер порта для прослушивания;
  • -n — задаёт максимальное количество шагов, разрешённое для одного игрока;
  • -s — включает сервисный режим (без ограничений по количеству шагов).
./maze-server -h localhost -p 1024 -n 10 -s

По умолчанию сокет сервера связывается с адресом localhost:1024, игрокам разрешено 10 шагов, сервисный режим выключен. Завершения работы сервера — Ctrl+C.

Клиент подключается к серверу, отправляет своё имя и получает интерактивную игру в лабиринт. Поддерживаемые команды:

  • вперёд — перемещение вверх;
  • направо — перемещение вправо;
  • налево — перемещение влево;
  • назад — перемещение вниз;
  • аюсь — завершение игры досрочно.

Если игрок исчерпал все ходы, но не дошёл до финиша, он считается проигравшим. Финиш находится в позиции (2, 2) (координаты x, y).

Запуск клиента

Приложение клиента при запуске принимает три необязательных ключа -h, -p  и -n с параметрами. Ключи -h и -p задают сетевой адрес (название хоста и номер порта соответственно) сервера для подключения.

./maze_client -h localhost -p 1024

По умолчанию клиент пытается подключиться к адресу localhost:1024.