1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-21 00:19:29 +02:00
Files
.github
AI
CI
Mods
android
client
clientapp
cmake_modules
config
debian
docs
include
ios
launcher
lib
battle
bonuses
campaign
constants
entities
events
filesystem
gameState
json
logging
mapObjectConstructors
mapObjects
mapping
minizip
modding
network
NetworkConnection.cpp
NetworkConnection.h
NetworkDefines.h
NetworkHandler.cpp
NetworkHandler.h
NetworkInterface.h
NetworkServer.cpp
NetworkServer.h
networkPacks
pathfinder
rewardable
rmg
serializer
spells
texts
vstd
AI_Base.h
ArtifactUtils.cpp
ArtifactUtils.h
BasicTypes.cpp
BattleFieldHandler.cpp
BattleFieldHandler.h
CAndroidVMHelper.cpp
CAndroidVMHelper.h
CArtHandler.cpp
CArtHandler.h
CArtifactInstance.cpp
CArtifactInstance.h
CBonusTypeHandler.cpp
CBonusTypeHandler.h
CConfigHandler.cpp
CConfigHandler.h
CConsoleHandler.cpp
CConsoleHandler.h
CCreatureHandler.cpp
CCreatureHandler.h
CCreatureSet.cpp
CCreatureSet.h
CGameInfoCallback.cpp
CGameInfoCallback.h
CGameInterface.cpp
CGameInterface.h
CHeroHandler.cpp
CHeroHandler.h
CMakeLists.txt
CPlayerState.cpp
CPlayerState.h
CRandomGenerator.cpp
CRandomGenerator.h
CScriptingModule.cpp
CScriptingModule.h
CSkillHandler.cpp
CSkillHandler.h
CSoundBase.h
CStack.cpp
CStack.h
CStopWatch.h
CThreadHelper.cpp
CThreadHelper.h
Color.h
ConstTransitivePtr.h
ExceptionsCommon.h
ExtraOptionsInfo.cpp
ExtraOptionsInfo.h
FunctionList.h
GameCallbackHolder.h
GameConstants.h
GameSettings.cpp
GameSettings.h
IBonusTypeHandler.h
IGameCallback.cpp
IGameCallback.h
IGameEventsReceiver.h
IGameSettings.h
IHandlerBase.cpp
IHandlerBase.h
LoadProgress.cpp
LoadProgress.h
LogicalExpression.cpp
LogicalExpression.h
ObstacleHandler.cpp
ObstacleHandler.h
Point.h
Rect.cpp
Rect.h
ResourceSet.cpp
ResourceSet.h
RiverHandler.cpp
RiverHandler.h
RoadHandler.cpp
RoadHandler.h
ScopeGuard.h
ScriptHandler.cpp
ScriptHandler.h
StartInfo.cpp
StartInfo.h
StdInc.cpp
StdInc.h
TerrainHandler.cpp
TerrainHandler.h
TurnTimerInfo.cpp
TurnTimerInfo.h
UnlockGuard.h
VCMIDirs.cpp
VCMIDirs.h
VCMI_Lib.cpp
VCMI_Lib.h
int3.h
vcmi_endian.h
lobby
mapeditor
osx
rpm
scripting
scripts
server
serverapp
test
win
xcode
.gitattributes
.gitignore
.gitmodules
.travis.yml
AUTHORS.h
CCallback.cpp
CCallback.h
CMakeLists.txt
CMakePresets.json
ChangeLog.md
Global.h
Version.cpp.in
Version.h
conanfile.py
fuzzylite.pc.in
license.txt
vcmibuilder
vcmi/lib/network/NetworkHandler.cpp
Ivan Savenko dae3569077 Fix build
2024-05-11 16:18:21 +00:00

82 lines
2.1 KiB
C++

/*
* NetworkHandler.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 "NetworkHandler.h"
#include "NetworkServer.h"
#include "NetworkConnection.h"
VCMI_LIB_NAMESPACE_BEGIN
std::unique_ptr<INetworkHandler> INetworkHandler::createHandler()
{
return std::make_unique<NetworkHandler>();
}
NetworkHandler::NetworkHandler()
: io(std::make_shared<NetworkContext>())
{}
std::unique_ptr<INetworkServer> NetworkHandler::createServerTCP(INetworkServerListener & listener)
{
return std::make_unique<NetworkServer>(listener, io);
}
void NetworkHandler::connectToRemote(INetworkClientListener & listener, const std::string & host, uint16_t port)
{
auto socket = std::make_shared<NetworkSocket>(*io);
auto resolver = std::make_shared<boost::asio::ip::tcp::resolver>(*io);
resolver->async_resolve(host, std::to_string(port),
[this, &listener, resolver, socket](const boost::system::error_code& error, const boost::asio::ip::tcp::resolver::results_type & endpoints)
{
if (error)
{
listener.onConnectionFailed(error.message());
return;
}
boost::asio::async_connect(*socket, endpoints, [this, socket, &listener](const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& endpoint)
{
if (error)
{
listener.onConnectionFailed(error.message());
return;
}
auto connection = std::make_shared<NetworkConnection>(listener, socket, io);
connection->start();
listener.onConnectionEstablished(connection);
});
});
}
void NetworkHandler::run()
{
boost::asio::executor_work_guard<decltype(io->get_executor())> work{io->get_executor()};
io->run();
}
void NetworkHandler::createTimer(INetworkTimerListener & listener, std::chrono::milliseconds duration)
{
auto timer = std::make_shared<NetworkTimer>(*io, duration);
timer->async_wait([&listener, timer](const boost::system::error_code& error){
if (!error)
listener.onTimer();
});
}
void NetworkHandler::stop()
{
io->stop();
}
VCMI_LIB_NAMESPACE_END