2024-02-10 23:56:02 +02:00
|
|
|
/*
|
|
|
|
* ServerRunner.h, 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
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
2024-03-01 12:18:08 +02:00
|
|
|
VCMI_LIB_NAMESPACE_BEGIN
|
2024-03-01 12:10:40 +02:00
|
|
|
|
2024-03-01 11:57:48 +02:00
|
|
|
struct StartInfo;
|
2024-02-10 23:56:02 +02:00
|
|
|
|
2024-03-01 12:18:08 +02:00
|
|
|
VCMI_LIB_NAMESPACE_END
|
|
|
|
|
|
|
|
class CVCMIServer;
|
|
|
|
|
2024-02-10 23:56:02 +02:00
|
|
|
class IServerRunner
|
|
|
|
{
|
|
|
|
public:
|
2024-07-11 23:39:36 +02:00
|
|
|
virtual uint16_t start(uint16_t port, bool connectToLobby, std::shared_ptr<StartInfo> startingInfo) = 0;
|
2024-02-11 15:38:29 +02:00
|
|
|
virtual void shutdown() = 0;
|
|
|
|
virtual void wait() = 0;
|
|
|
|
virtual int exitCode() = 0;
|
2024-02-10 23:56:02 +02:00
|
|
|
|
|
|
|
virtual ~IServerRunner() = default;
|
|
|
|
};
|
|
|
|
|
2024-02-11 15:38:29 +02:00
|
|
|
/// Class that runs server instance as a thread of client process
|
2024-02-10 23:56:02 +02:00
|
|
|
class ServerThreadRunner : public IServerRunner, boost::noncopyable
|
|
|
|
{
|
|
|
|
std::unique_ptr<CVCMIServer> server;
|
|
|
|
boost::thread threadRunLocalServer;
|
|
|
|
public:
|
2024-07-11 23:39:36 +02:00
|
|
|
uint16_t start(uint16_t port, bool connectToLobby, std::shared_ptr<StartInfo> startingInfo) override;
|
2024-02-11 15:38:29 +02:00
|
|
|
void shutdown() override;
|
|
|
|
void wait() override;
|
|
|
|
int exitCode() override;
|
2024-02-10 23:56:02 +02:00
|
|
|
|
|
|
|
ServerThreadRunner();
|
|
|
|
~ServerThreadRunner();
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifndef VCMI_MOBILE
|
2024-09-06 18:57:57 +02:00
|
|
|
// Enable support for running vcmiserver as separate process. Unavailable on mobile systems
|
|
|
|
#define ENABLE_SERVER_PROCESS
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef ENABLE_SERVER_PROCESS
|
2024-02-10 23:56:02 +02:00
|
|
|
|
2024-09-06 18:57:57 +02:00
|
|
|
#if BOOST_VERSION >= 108600
|
2024-02-10 23:56:02 +02:00
|
|
|
namespace boost::process {
|
2024-09-06 18:57:57 +02:00
|
|
|
inline namespace v1 {
|
2024-02-10 23:56:02 +02:00
|
|
|
class child;
|
|
|
|
}
|
2024-09-06 18:57:57 +02:00
|
|
|
}
|
|
|
|
#else
|
|
|
|
namespace boost::process {
|
|
|
|
class child;
|
|
|
|
}
|
|
|
|
#endif
|
2024-02-10 23:56:02 +02:00
|
|
|
|
2024-02-11 15:38:29 +02:00
|
|
|
/// Class that runs server instance as a child process
|
|
|
|
/// Available only on desktop systems where process management is allowed
|
2024-02-10 23:56:02 +02:00
|
|
|
class ServerProcessRunner : public IServerRunner, boost::noncopyable
|
|
|
|
{
|
|
|
|
std::unique_ptr<boost::process::child> child;
|
|
|
|
|
|
|
|
public:
|
2024-07-11 23:39:36 +02:00
|
|
|
uint16_t start(uint16_t port, bool connectToLobby, std::shared_ptr<StartInfo> startingInfo) override;
|
2024-02-11 15:38:29 +02:00
|
|
|
void shutdown() override;
|
|
|
|
void wait() override;
|
|
|
|
int exitCode() override;
|
2024-02-10 23:56:02 +02:00
|
|
|
|
|
|
|
ServerProcessRunner();
|
|
|
|
~ServerProcessRunner();
|
|
|
|
};
|
|
|
|
#endif
|