forked from spring/spring
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGameParticipant.cpp
More file actions
52 lines (40 loc) · 1.29 KB
/
GameParticipant.cpp
File metadata and controls
52 lines (40 loc) · 1.29 KB
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
/* 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()
{
aiClientLinks[MAX_AIS] = ClientLinkData(false);
}
void GameParticipant::SendData(std::shared_ptr<const netcode::RawPacket> packet)
{
if (clientLink != nullptr)
clientLink->SendData(packet);
}
void GameParticipant::Connected(std::shared_ptr<netcode::CConnection> _link, bool local)
{
clientLink = _link;
aiClientLinks[MAX_AIS].link.reset(new netcode::CLoopbackConnection());
isLocal = local;
myState = CONNECTED;
lastFrameResponse = 0;
}
void GameParticipant::Kill(const std::string& reason, const bool flush)
{
if (clientLink != nullptr) {
clientLink->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));
clientLink->Close(flush);
clientLink.reset();
}
aiClientLinks[MAX_AIS].link.reset();
#ifdef SYNCCHECK
syncResponse.clear();
#endif
myState = DISCONNECTED;
}