59 lines
3.3 KiB
C++
59 lines
3.3 KiB
C++
/*! @file server.hpp
|
||
Заголовочный файл сервера для игры в лабиринт на базе сокетов.
|
||
@author ParkSuMin
|
||
@date 2025.04.30 */
|
||
|
||
#ifndef SERVER_HPP
|
||
#define SERVER_HPP
|
||
|
||
#include "maze.hpp"
|
||
|
||
#include <iostream>
|
||
#include <thread>
|
||
#include <sys/socket.h>
|
||
#include <netinet/in.h>
|
||
#include <netdb.h>
|
||
#include <unistd.h>
|
||
#include <cstring>
|
||
|
||
/*! Максимальное количество клиентов, которые могут быть в очереди на подключение. */
|
||
const int MAX_CLIENTS = 512;
|
||
|
||
/*! Размер буфера для обмена данными между сервером и клиентом. */
|
||
const int BUFFER_SIZE = 1024;
|
||
|
||
/*! Класс сервера для игры в лабиринт с использованием сокетов (протокол TCP). */
|
||
class Server {
|
||
private:
|
||
bool service_mode; ///< Флаг сервисного режима (тестовый режим без ограничения ходов).
|
||
int server_socket; ///< Серверный сокет для обработки клиентских подключений.
|
||
|
||
/*! Обрабатывает подключение одного клиента.
|
||
@details Создаёт лабиринт для клиента, принимает команды, обновляет состояние игры и отправляет ответы.
|
||
@param socket Сокет клиента.
|
||
@param flag Флаг сервисного режима.
|
||
@param steps Количество ходов, доступных игроку (игнорируется в сервисном режиме). */
|
||
void handle_client(int socket, bool flag, int steps);
|
||
|
||
/*! Проверяет статус игры.
|
||
@details Проверяет, остались ли ходы у игрока, и активен ли тестовый режим.
|
||
@param maze Экземпляр объекта класса лабиринта.
|
||
@return true, если игра продолжается, false — если игра завершена. */
|
||
bool check_status(Maze& maze);
|
||
public:
|
||
/*! Создаёт экземпляр сервера.
|
||
@details Инициализирует серверный сокет, связывает его с указанным хостом и портом.
|
||
@throw std::runtime_error При ошибке создания сокета, получения хоста или привязки.
|
||
@param host Адрес сервера (название хоста или IP-адрес).
|
||
@param port Порт сервера для подключения клиентов. */
|
||
Server(const std::string& host, const unsigned short port);
|
||
|
||
/*! Запускает сервер.
|
||
@details Начинает прослушивание входящих подключений и создаёт отдельные потоки для обработки клиентов.
|
||
@throw std::runtime_error При ошибке прослушивания или принятия соединения.
|
||
@param steps Количество ходов, доступных каждому игроку.
|
||
@param service_flag Флаг активации сервисного режима. */
|
||
void start(int steps, bool service_flag);
|
||
};
|
||
|
||
#endif |