/* * ServerRunner.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #include "StdInc.h" #include "ServerRunner.h" #include "../lib/VCMIDirs.h" #include "../lib/CThreadHelper.h" #include "../server/CVCMIServer.h" #ifndef VCMI_MOBILE #include #include #endif ServerThreadRunner::ServerThreadRunner() = default; ServerThreadRunner::~ServerThreadRunner() = default; void ServerThreadRunner::start(uint16_t port, bool connectToLobby, std::shared_ptr startingInfo) { server = std::make_unique(port, connectToLobby, true); if (startingInfo) { server->si = startingInfo; //Else use default } threadRunLocalServer = boost::thread([this]{ setThreadName("runServer"); server->run(); }); } void ServerThreadRunner::shutdown() { server->setState(EServerState::SHUTDOWN); } void ServerThreadRunner::wait() { threadRunLocalServer.join(); } int ServerThreadRunner::exitCode() { return 0; } #ifndef VCMI_MOBILE ServerProcessRunner::ServerProcessRunner() = default; ServerProcessRunner::~ServerProcessRunner() = default; void ServerProcessRunner::shutdown() { child->terminate(); } void ServerProcessRunner::wait() { child->wait(); } int ServerProcessRunner::exitCode() { return child->exit_code(); } void ServerProcessRunner::start(uint16_t port, bool connectToLobby, std::shared_ptr startingInfo) { boost::filesystem::path serverPath = VCMIDirs::get().serverPath(); boost::filesystem::path logPath = VCMIDirs::get().userLogsPath() / "server_log.txt"; std::vector args; args.push_back("--port=" + std::to_string(port)); args.push_back("--run-by-client"); if(connectToLobby) args.push_back("--lobby"); std::error_code ec; child = std::make_unique(serverPath, args, ec, boost::process::std_out > logPath); if (ec) throw std::runtime_error("Failed to start server! Reason: " + ec.message()); } #endif