blob: 3df2b68d9230077d38809dd6db8e3f5d17bf1f10 (
plain)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#pragma once
#include "core/convar/convar.h"
struct ServerPresence
{
public:
int m_iPort;
int m_iAuthPort;
std::string m_sServerId;
std::string m_sServerName;
std::string m_sServerDesc;
char m_Password[256]; // probably bigger than will ever be used in practice, lol
char m_MapName[32];
char m_PlaylistName[64];
bool m_bIsSingleplayerServer; // whether the server started in sp
int m_iPlayerCount;
int m_iMaxPlayers;
ServerPresence()
{
memset(this, 0, sizeof(this));
}
ServerPresence(const ServerPresence* obj)
{
m_iPort = obj->m_iPort;
m_iAuthPort = obj->m_iAuthPort;
m_sServerId = obj->m_sServerId;
m_sServerName = obj->m_sServerName;
m_sServerDesc = obj->m_sServerDesc;
memcpy(m_Password, obj->m_Password, sizeof(m_Password));
memcpy(m_MapName, obj->m_MapName, sizeof(m_MapName));
memcpy(m_PlaylistName, obj->m_PlaylistName, sizeof(m_PlaylistName));
m_iPlayerCount = obj->m_iPlayerCount;
m_iMaxPlayers = obj->m_iMaxPlayers;
}
};
class ServerPresenceReporter
{
public:
virtual void CreatePresence(const ServerPresence* pServerPresence) {}
virtual void ReportPresence(const ServerPresence* pServerPresence) {}
virtual void DestroyPresence(const ServerPresence* pServerPresence) {}
virtual void RunFrame(double flCurrentTime, const ServerPresence* pServerPresence) {}
};
class ServerPresenceManager
{
private:
ServerPresence m_ServerPresence;
bool m_bHasPresence = false;
bool m_bFirstPresenceUpdate = false;
std::vector<ServerPresenceReporter*> m_vPresenceReporters;
double m_flLastPresenceUpdate = 0;
ConVar* Cvar_ns_server_presence_update_rate;
ConVar* Cvar_ns_server_name;
ConVar* Cvar_ns_server_desc;
ConVar* Cvar_ns_server_password;
ConVar* Cvar_ns_report_server_to_masterserver;
ConVar* Cvar_ns_report_sp_server_to_masterserver;
public:
void AddPresenceReporter(ServerPresenceReporter* reporter);
void CreateConVars();
void CreatePresence();
void DestroyPresence();
void RunFrame(double flCurrentTime);
void SetPort(const int iPort);
void SetAuthPort(const int iPort);
void SetName(const std::string sServerNameUnicode);
void SetDescription(const std::string sServerDescUnicode);
void SetPassword(const char* pPassword);
void SetMap(const char* pMapName, bool isInitialising = false);
void SetPlaylist(const char* pPlaylistName);
void SetPlayerCount(const int iPlayerCount);
};
extern ServerPresenceManager* g_pServerPresence;
|