/*! @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(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; }