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 53 54 55 56
|
/* 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()
: id(-1)
, 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));
// make sure the Flush() performed by Close() has effect (forced flushes are undesirable)
// it will cause a slight lag in the game server during kick, but not a big deal
if (flush)
spring_sleep(spring_msecs(1000));
link->Close(flush);
link.reset();
}
linkData[MAX_AIS].link.reset();
#ifdef SYNCCHECK
syncResponse.clear();
#endif
myState = DISCONNECTED;
}
|