1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#include "GameParticipant.h"
#include "Net/Protocol/BaseNetProtocol.h"
#include "Sim/Misc/GlobalConstants.h"
#include "System/Net/Connection.h"
#include "System/Misc/SpringTime.h"
GameParticipant::GameParticipant()
: myState(UNCONNECTED)
, lastFrameResponse(0)
, speedControl(0)
, isLocal(false)
, isReconn(false)
, isMidgameJoin(false)
{
linkData[MAX_AIS] = PlayerLinkData(false);
}
void GameParticipant::SendData(boost::shared_ptr<const netcode::RawPacket> packet)
{
if (link)
link->SendData(packet);
}
void GameParticipant::Connected(boost::shared_ptr<netcode::CConnection> _link, bool local)
{
link = _link;
linkData[MAX_AIS].link.reset(new netcode::CLoopbackConnection());
isLocal = local;
myState = CONNECTED;
lastFrameResponse = 0;
}
void GameParticipant::Kill(const std::string& reason, const bool flush)
{
if (link)
{
link->SendData(CBaseNetProtocol::Get().SendQuit(reason));
if (flush) // make sure the Flush() performed by Close() has any effect (forced flushes are undesirable)
spring_sleep(spring_msecs(1000)); // it will cause a slight lag in the game server during kick, but not a big deal
link->Close();
link.reset();
}
linkData[MAX_AIS].link.reset();
#ifdef SYNCCHECK
syncResponse.clear();
#endif
myState = DISCONNECTED;
}
|