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 57 58 59 60 61 62 63 64 65 66 67 68
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef _GAME_PARTICIPANT_H
#define _GAME_PARTICIPANT_H
#include <memory>
#include "Game/Players/PlayerBase.h"
#include "Game/Players/PlayerStatistics.h"
#include "System/Net/LoopbackConnection.h"
#include "System/UnorderedMap.hpp"
namespace netcode
{
class CConnection;
class RawPacket;
}
class GameParticipant : public PlayerBase
{
public:
GameParticipant();
void SendData(std::shared_ptr<const netcode::RawPacket> packet);
void Connected(std::shared_ptr<netcode::CConnection> link, bool local);
void Kill(const std::string& reason, const bool flush = false);
GameParticipant& operator=(const PlayerBase& base) { PlayerBase::operator=(base); return *this; };
public:
int id = -1;
int lastFrameResponse = 0;
enum State {
UNCONNECTED,
CONNECTED,
INGAME,
DISCONNECTED
};
State myState = UNCONNECTED;
bool isLocal = false;
bool isReconn = false;
bool isMidgameJoin = false;
PlayerStatistics lastStats;
struct ClientLinkData {
ClientLinkData(bool connect = true) {
if (connect)
link.reset(new netcode::CLoopbackConnection());
}
std::shared_ptr<netcode::CConnection> link;
int bandwidthUsage = 0;
int numPacketsSent = 0;
};
std::shared_ptr<netcode::CConnection> clientLink;
spring::unordered_map<uint8_t, ClientLinkData> aiClientLinks;
#ifdef SYNCCHECK
spring::unordered_map<int, unsigned int> syncResponse; // syncResponse[frameNum] = checksum
#endif
};
#endif // _GAME_PARTICIPANT_H
|