71 lines
2.2 KiB
C++
71 lines
2.2 KiB
C++
/*! @file server_main.cpp
|
||
Главный файл сервера для игры в лабиринт на базе сокетов.
|
||
@author ParkSuMin
|
||
@date 2025.04.30 */
|
||
|
||
#include "server.hpp"
|
||
|
||
/*! Главная функция сервера.
|
||
@details Обрабатывает аргументы командной строки, создаёт экземпляр сервера и запускает его.
|
||
@throw std::runtime_error При ошибке работы сервера.
|
||
@throw std::exception При непредвиденной ошибке.
|
||
@dot
|
||
digraph main {
|
||
ranksep=0.25;
|
||
node [shape=box,fontsize="10",fixedsize=true,width=2,height=0.3]
|
||
edge [arrowsize=0.5]
|
||
Beg [label="Начало",shape=ellipse]
|
||
End [label="Конец",shape=ellipse]
|
||
A [label="Проверка аргументов"]
|
||
B [label="Создание сервера"]
|
||
C [label="Запуск сервера"]
|
||
D [label="Обработка исключений"]
|
||
Beg->A->B->C->End
|
||
B->D
|
||
C->D->End
|
||
}
|
||
@enddot */
|
||
int main(int argc, char **argv) {
|
||
int opt;
|
||
std::string host = "localhost";
|
||
int steps = 10;
|
||
bool service_mode = false;
|
||
short unsigned port = 1024u;
|
||
|
||
while ((opt = getopt(argc, argv, "h:p:sn:")) != -1) {
|
||
switch (opt) {
|
||
case 'h':
|
||
host = optarg;
|
||
break;
|
||
case 'p':
|
||
port = static_cast<unsigned short>(atoi(optarg));
|
||
break;
|
||
case 'n':
|
||
steps = atoi(optarg);
|
||
if(steps <= 0) {
|
||
std::cerr << "Invalid steps" << std::endl;
|
||
return 1;
|
||
}
|
||
break;
|
||
case 's':
|
||
service_mode = true;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
try {
|
||
Server server(host, port);
|
||
server.start(steps, service_mode);
|
||
} catch (const std::runtime_error& e){
|
||
std::cerr << "Server application error: " << e.what() << std::endl;
|
||
return 1;
|
||
} catch (...){
|
||
std::cerr << "Unexpected error in client application" << std::endl;
|
||
return 2;
|
||
}
|
||
|
||
std::cout << "Server application finished" << std::endl;
|
||
return 0;
|
||
} |