DDraceNetwork Documentation
Loading...
Searching...
No Matches
serverbrowser.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef ENGINE_CLIENT_SERVERBROWSER_H
4#define ENGINE_CLIENT_SERVERBROWSER_H
5
6#include <base/hash.h>
7#include <base/system.h>
8
9#include <engine/console.h>
12
13#include <functional>
14#include <map>
15#include <optional>
16#include <set>
17
18typedef struct _json_value json_value;
19class CNetClient;
20class IConfigManager;
21class IConsole;
22class IEngine;
23class IFavorites;
24class IFriends;
27class IStorage;
28class IHttp;
29
31{
33
34public:
35 CCommunityId(const char *pCommunityId)
36 {
37 str_copy(m_aId, pCommunityId);
38 }
39
40 const char *Id() const { return m_aId; }
41
42 bool operator==(const CCommunityId &Other) const
43 {
44 return str_comp(Id(), Other.Id()) == 0;
45 }
46
47 bool operator<(const CCommunityId &Other) const
48 {
49 return str_comp(Id(), Other.Id()) < 0;
50 }
51};
52
53template<>
54struct std::hash<CCommunityId>
55{
56 size_t operator()(const CCommunityId &Elem) const noexcept
57 {
58 return str_quickhash(Elem.Id());
59 }
60};
61
63{
65
66public:
67 CCommunityCountryName(const char *pCountryName)
68 {
69 str_copy(m_aName, pCountryName);
70 }
71
72 const char *Name() const { return m_aName; }
73
74 bool operator==(const CCommunityCountryName &Other) const
75 {
76 return str_comp(Name(), Other.Name()) == 0;
77 }
78
79 bool operator<(const CCommunityCountryName &Other) const
80 {
81 return str_comp(Name(), Other.Name()) < 0;
82 }
83};
84
85template<>
86struct std::hash<CCommunityCountryName>
87{
88 size_t operator()(const CCommunityCountryName &Elem) const noexcept
89 {
90 return str_quickhash(Elem.Name());
91 }
92};
93
95{
97
98public:
99 CCommunityTypeName(const char *pTypeName)
100 {
101 str_copy(m_aName, pTypeName);
102 }
103
104 const char *Name() const { return m_aName; }
105
106 bool operator==(const CCommunityTypeName &Other) const
107 {
108 return str_comp(Name(), Other.Name()) == 0;
109 }
110
111 bool operator<(const CCommunityTypeName &Other) const
112 {
113 return str_comp(Name(), Other.Name()) < 0;
114 }
115};
116
117template<>
118struct std::hash<CCommunityTypeName>
119{
120 size_t operator()(const CCommunityTypeName &Elem) const noexcept
121 {
122 return str_quickhash(Elem.Name());
123 }
124};
125
127{
131
132public:
133 CCommunityServer(const char *pCommunityId, const char *pCountryName, const char *pTypeName)
134 {
135 str_copy(m_aCommunityId, pCommunityId);
136 str_copy(m_aCountryName, pCountryName);
137 str_copy(m_aTypeName, pTypeName);
138 }
139
140 const char *CommunityId() const { return m_aCommunityId; }
141 const char *CountryName() const { return m_aCountryName; }
142 const char *TypeName() const { return m_aTypeName; }
143};
144
146{
147public:
148 void Add(const char *pCommunityId) override;
149 void Remove(const char *pCommunityId) override;
150 void Clear() override;
151 bool Filtered(const char *pCommunityId) const override;
152 bool Empty() const override;
153 void Clean(const std::vector<CCommunity> &vAllowedCommunities);
154 void Save(IConfigManager *pConfigManager) const;
155 const std::vector<CCommunityId> &Entries() const;
156
157private:
158 std::vector<CCommunityId> m_vEntries;
159};
160
162{
163public:
164 void Add(const char *pCommunityId) override;
165 void Remove(const char *pCommunityId) override;
166 void Clear() override;
167 bool Filtered(const char *pCommunityId) const override;
168 bool Empty() const override;
169 void Clean(const std::vector<CCommunity> &vAllowedCommunities);
170 void Save(IConfigManager *pConfigManager) const;
171
172private:
173 std::set<CCommunityId> m_Entries;
174};
175
177{
178public:
180 m_pCommunityCache(pCommunityCache)
181 {
182 }
183
184 void Add(const char *pCountryName) override;
185 void Add(const char *pCommunityId, const char *pCountryName);
186 void Remove(const char *pCountryName) override;
187 void Remove(const char *pCommunityId, const char *pCountryName);
188 void Clear() override;
189 bool Filtered(const char *pCountryName) const override;
190 bool Empty() const override;
191 void Clean(const std::vector<CCommunity> &vAllowedCommunities);
192 void Save(IConfigManager *pConfigManager) const;
193
194private:
196 std::map<CCommunityId, std::set<CCommunityCountryName>> m_Entries;
197};
198
200{
201public:
203 m_pCommunityCache(pCommunityCache)
204 {
205 }
206
207 void Add(const char *pTypeName) override;
208 void Add(const char *pCommunityId, const char *pTypeName);
209 void Remove(const char *pTypeName) override;
210 void Remove(const char *pCommunityId, const char *pTypeName);
211 void Clear() override;
212 bool Filtered(const char *pTypeName) const override;
213 bool Empty() const override;
214 void Clean(const std::vector<CCommunity> &vAllowedCommunities);
215 void Save(IConfigManager *pConfigManager) const;
216
217private:
219 std::map<CCommunityId, std::set<CCommunityTypeName>> m_Entries;
220};
221
223{
225 std::optional<SHA256_DIGEST> m_InfoSha256;
226 int m_LastType = IServerBrowser::NUM_TYPES; // initial value does not appear normally, marking uninitialized cache
228 std::vector<const CCommunity *> m_vpSelectedCommunities;
229 std::vector<const CCommunityCountry *> m_vpSelectableCountries;
230 std::vector<const CCommunityType *> m_vpSelectableTypes;
234
235public:
237 m_pServerBrowser(pServerBrowser)
238 {
239 }
240
241 void Update(bool Force) override;
242 const std::vector<const CCommunity *> &SelectedCommunities() const override { return m_vpSelectedCommunities; }
243 const std::vector<const CCommunityCountry *> &SelectableCountries() const override { return m_vpSelectableCountries; }
244 const std::vector<const CCommunityType *> &SelectableTypes() const override { return m_vpSelectableTypes; }
245 bool AnyRanksAvailable() const override { return m_AnyRanksAvailable; }
247 const char *CountryTypeFilterKey() const override { return m_pCountryTypeFilterKey; }
248};
249
251{
252public:
254 ~CServerBrowser() override;
255
256 // interface functions
257 void Refresh(int Type, bool Force = false) override;
258 bool IsRefreshing() const override;
259 bool IsGettingServerlist() const override;
260 bool IsServerlistError() const override;
261 int LoadingProgression() const override;
262 void RequestResort() { m_NeedResort = true; }
263
264 int NumServers() const override { return m_vpServerlist.size(); }
265 const CServerInfo *Get(int Index) const override;
266 int Players(const CServerInfo &Item) const override;
267 int Max(const CServerInfo &Item) const override;
268 int NumSortedServers() const override { return m_vSortedServerlist.size(); }
269 int NumSortedPlayers() const override { return m_NumSortedPlayers; }
270 const CServerInfo *SortedGet(int Index) const override;
271
272 const json_value *LoadDDNetInfo();
273 void LoadDDNetInfoJson();
274 void LoadDDNetLocation();
275 void LoadDDNetServers();
276 void UpdateServerFilteredPlayers(CServerInfo *pInfo) const;
277 void UpdateServerFriends(CServerInfo *pInfo) const;
278 void UpdateServerCommunity(CServerInfo *pInfo) const;
279 void UpdateServerRank(CServerInfo *pInfo) const;
281 const char *GetTutorialServer() override;
282
283 const std::vector<CCommunity> &Communities() const override;
284 const CCommunity *Community(const char *pCommunityId) const override;
285 std::vector<const CCommunity *> SelectedCommunities() const override;
286 std::vector<const CCommunity *> FavoriteCommunities() const override;
287 std::vector<const CCommunity *> CurrentCommunities() const override;
288 unsigned CurrentCommunitiesHash() const override;
289
290 bool DDNetInfoAvailable() const override { return m_pDDNetInfo != nullptr; }
291 std::optional<SHA256_DIGEST> DDNetInfoSha256() const override { return m_DDNetInfoSha256; }
292
294 const ICommunityCache &CommunityCache() const override { return m_CommunityCache; }
303 void CleanFilters() override;
304
305 //
306 void Update();
307 void OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo);
308 void SetHttpInfo(const CServerInfo *pInfo);
309 void RequestCurrentServer(const NETADDR &Addr) const;
310 void RequestCurrentServerWithRandomToken(const NETADDR &Addr, int *pBasicToken, int *pToken) const;
311 void SetCurrentServerPing(const NETADDR &Addr, int Ping);
312
313 void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion);
314 void OnInit();
315
316 void QueueRequest(CServerEntry *pEntry);
317 CServerEntry *Find(const NETADDR &Addr) override;
318 int GetCurrentType() override { return m_ServerlistType; }
319 bool IsRegistered(const NETADDR &Addr);
320
321private:
325 IEngine *m_pEngine = nullptr;
330 char m_aNetVersion[128];
331
332 bool m_RefreshingHttp = false;
335 const char *m_pHttpPrevBestUrl = nullptr;
336
338 std::vector<CServerEntry *> m_vpServerlist;
339 std::vector<int> m_vSortedServerlist;
340 std::unordered_map<NETADDR, int> m_ByAddr;
341
342 std::vector<CCommunity> m_vCommunities;
343 std::unordered_map<NETADDR, CCommunityServer> m_CommunityServersByAddr;
344
346
352
354 std::optional<SHA256_DIGEST> m_DDNetInfoSha256;
355
359
362
363 // used instead of g_Config.br_max_requests to get more servers
365
367
370 unsigned char m_aTokenSeed[16];
371
372 int GenerateToken(const NETADDR &Addr) const;
373 static int GetBasicToken(int Token);
374 static int GetExtraToken(int Token);
375
376 // sorting criteria
377 bool SortCompareName(int Index1, int Index2) const;
378 bool SortCompareMap(int Index1, int Index2) const;
379 bool SortComparePing(int Index1, int Index2) const;
380 bool SortCompareGametype(int Index1, int Index2) const;
381 bool SortCompareNumPlayers(int Index1, int Index2) const;
382 bool SortCompareNumClients(int Index1, int Index2) const;
383 bool SortCompareNumFriends(int Index1, int Index2) const;
384 bool SortCompareNumPlayersAndPing(int Index1, int Index2) const;
385
386 //
387 void Filter();
388 void Sort();
389 int SortHash() const;
390
391 void CleanUp();
392
393 void UpdateFromHttp();
394 CServerEntry *Add(const NETADDR *pAddrs, int NumAddrs);
395 CServerEntry *ReplaceEntry(CServerEntry *pEntry, const NETADDR *pAddrs, int NumAddrs);
396
397 void RemoveRequest(CServerEntry *pEntry);
398
399 void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const;
400
401 void RegisterCommands();
402 static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData);
403 static void Con_AddFavoriteCommunity(IConsole::IResult *pResult, void *pUserData);
404 static void Con_RemoveFavoriteCommunity(IConsole::IResult *pResult, void *pUserData);
405 static void Con_AddExcludedCommunity(IConsole::IResult *pResult, void *pUserData);
406 static void Con_RemoveExcludedCommunity(IConsole::IResult *pResult, void *pUserData);
407 static void Con_AddExcludedCountry(IConsole::IResult *pResult, void *pUserData);
408 static void Con_RemoveExcludedCountry(IConsole::IResult *pResult, void *pUserData);
409 static void Con_AddExcludedType(IConsole::IResult *pResult, void *pUserData);
410 static void Con_RemoveExcludedType(IConsole::IResult *pResult, void *pUserData);
411 static void Con_LeakIpAddress(IConsole::IResult *pResult, void *pUserData);
412
413 bool ValidateCommunityId(const char *pCommunityId) const;
414 bool ValidateCountryName(const char *pCountryName) const;
415 bool ValidateTypeName(const char *pTypeName) const;
416
417 void SetInfo(CServerEntry *pEntry, const CServerInfo &Info) const;
418 void SetLatency(NETADDR Addr, int Latency);
419
420 static bool ParseCommunityFinishes(CCommunity *pCommunity, const json_value &Finishes);
421 static bool ParseCommunityServers(CCommunity *pCommunity, const json_value &Servers);
422};
423
424#endif
Definition serverbrowser.h:223
const char * CountryTypeFilterKey() const override
Definition serverbrowser.h:247
const std::vector< const CCommunity * > & SelectedCommunities() const override
Definition serverbrowser.h:242
int m_LastType
Definition serverbrowser.h:226
void Update(bool Force) override
Definition serverbrowser.cpp:1845
const std::vector< const CCommunityType * > & SelectableTypes() const override
Definition serverbrowser.h:244
std::vector< const CCommunityCountry * > m_vpSelectableCountries
Definition serverbrowser.h:229
CCommunityCache(IServerBrowser *pServerBrowser)
Definition serverbrowser.h:236
unsigned m_SelectedCommunitiesHash
Definition serverbrowser.h:227
std::vector< const CCommunity * > m_vpSelectedCommunities
Definition serverbrowser.h:228
IServerBrowser * m_pServerBrowser
Definition serverbrowser.h:224
bool CountriesTypesFilterAvailable() const override
Definition serverbrowser.h:246
bool m_AnyRanksAvailable
Definition serverbrowser.h:231
std::optional< SHA256_DIGEST > m_InfoSha256
Definition serverbrowser.h:225
const char * m_pCountryTypeFilterKey
Definition serverbrowser.h:233
bool m_CountryTypesFilterAvailable
Definition serverbrowser.h:232
const std::vector< const CCommunityCountry * > & SelectableCountries() const override
Definition serverbrowser.h:243
bool AnyRanksAvailable() const override
Definition serverbrowser.h:245
std::vector< const CCommunityType * > m_vpSelectableTypes
Definition serverbrowser.h:230
Definition serverbrowser.h:63
char m_aName[CServerInfo::MAX_COMMUNITY_COUNTRY_LENGTH]
Definition serverbrowser.h:64
const char * Name() const
Definition serverbrowser.h:72
CCommunityCountryName(const char *pCountryName)
Definition serverbrowser.h:67
bool operator<(const CCommunityCountryName &Other) const
Definition serverbrowser.h:79
bool operator==(const CCommunityCountryName &Other) const
Definition serverbrowser.h:74
Definition serverbrowser.h:31
CCommunityId(const char *pCommunityId)
Definition serverbrowser.h:35
char m_aId[CServerInfo::MAX_COMMUNITY_ID_LENGTH]
Definition serverbrowser.h:32
const char * Id() const
Definition serverbrowser.h:40
bool operator<(const CCommunityId &Other) const
Definition serverbrowser.h:47
bool operator==(const CCommunityId &Other) const
Definition serverbrowser.h:42
char m_aTypeName[CServerInfo::MAX_COMMUNITY_TYPE_LENGTH]
Definition serverbrowser.h:130
CCommunityServer(const char *pCommunityId, const char *pCountryName, const char *pTypeName)
Definition serverbrowser.h:133
const char * TypeName() const
Definition serverbrowser.h:142
char m_aCommunityId[CServerInfo::MAX_COMMUNITY_ID_LENGTH]
Definition serverbrowser.h:128
char m_aCountryName[CServerInfo::MAX_COMMUNITY_COUNTRY_LENGTH]
Definition serverbrowser.h:129
const char * CommunityId() const
Definition serverbrowser.h:140
const char * CountryName() const
Definition serverbrowser.h:141
Definition serverbrowser.h:95
bool operator<(const CCommunityTypeName &Other) const
Definition serverbrowser.h:111
const char * Name() const
Definition serverbrowser.h:104
bool operator==(const CCommunityTypeName &Other) const
Definition serverbrowser.h:106
char m_aName[CServerInfo::MAX_COMMUNITY_TYPE_LENGTH]
Definition serverbrowser.h:96
CCommunityTypeName(const char *pTypeName)
Definition serverbrowser.h:99
Definition serverbrowser.h:212
Definition serverbrowser.h:177
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2195
CExcludedCommunityCountryFilterList(const ICommunityCache *pCommunityCache)
Definition serverbrowser.h:179
bool Empty() const override
Definition serverbrowser.cpp:2113
void Add(const char *pCountryName) override
Definition serverbrowser.cpp:2054
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2121
std::map< CCommunityId, std::set< CCommunityCountryName > > m_Entries
Definition serverbrowser.h:196
bool Filtered(const char *pCountryName) const override
Definition serverbrowser.cpp:2103
void Remove(const char *pCountryName) override
Definition serverbrowser.cpp:2080
void Clear() override
Definition serverbrowser.cpp:2094
const ICommunityCache * m_pCommunityCache
Definition serverbrowser.h:195
Definition serverbrowser.h:162
bool Empty() const override
Definition serverbrowser.cpp:2014
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2042
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2019
void Clear() override
Definition serverbrowser.cpp:2004
void Add(const char *pCommunityId) override
Definition serverbrowser.cpp:1994
bool Filtered(const char *pCommunityId) const override
Definition serverbrowser.cpp:2009
std::set< CCommunityId > m_Entries
Definition serverbrowser.h:173
void Remove(const char *pCommunityId) override
Definition serverbrowser.cpp:1999
Definition serverbrowser.h:200
void Clear() override
Definition serverbrowser.cpp:2252
void Add(const char *pTypeName) override
Definition serverbrowser.cpp:2212
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2279
bool Filtered(const char *pTypeName) const override
Definition serverbrowser.cpp:2261
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2353
std::map< CCommunityId, std::set< CCommunityTypeName > > m_Entries
Definition serverbrowser.h:219
bool Empty() const override
Definition serverbrowser.cpp:2271
void Remove(const char *pTypeName) override
Definition serverbrowser.cpp:2238
const ICommunityCache * m_pCommunityCache
Definition serverbrowser.h:218
CExcludedCommunityTypeFilterList(const ICommunityCache *pCommunityCache)
Definition serverbrowser.h:202
Definition serverbrowser.h:146
void Remove(const char *pCommunityId) override
Definition serverbrowser.cpp:1935
bool Filtered(const char *pCommunityId) const override
Definition serverbrowser.cpp:1949
bool Empty() const override
Definition serverbrowser.cpp:1954
void Clear() override
Definition serverbrowser.cpp:1944
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:1959
void Add(const char *pCommunityId) override
Definition serverbrowser.cpp:1917
const std::vector< CCommunityId > & Entries() const
Definition serverbrowser.cpp:1981
std::vector< CCommunityId > m_vEntries
Definition serverbrowser.h:158
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:1969
Definition memheap.h:11
Definition network.h:569
int NumServers() const override
Definition serverbrowser.h:264
CFavoriteCommunityFilterList & FavoriteCommunitiesFilter() override
Definition serverbrowser.h:295
static void Con_RemoveExcludedType(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:195
CExcludedCommunityFilterList & CommunitiesFilter() override
Definition serverbrowser.h:296
CExcludedCommunityCountryFilterList m_CountriesFilter
Definition serverbrowser.h:350
int64_t m_BroadcastTime
Definition serverbrowser.h:369
void OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo)
Definition serverbrowser.cpp:901
CServerEntry * ReplaceEntry(CServerEntry *pEntry, const NETADDR *pAddrs, int NumAddrs)
Definition serverbrowser.cpp:873
static bool ParseCommunityServers(CCommunity *pCommunity, const json_value &Servers)
Definition serverbrowser.cpp:1426
IFavorites * m_pFavorites
Definition serverbrowser.h:327
void ValidateServerlistType()
Definition serverbrowser.cpp:1683
static void Con_RemoveFavoriteCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:138
std::vector< CServerEntry * > m_vpServerlist
Definition serverbrowser.h:338
void RemoveRequest(CServerEntry *pEntry)
Definition serverbrowser.cpp:663
bool IsGettingServerlist() const override
Definition serverbrowser.cpp:1731
int Players(const CServerInfo &Item) const override
Definition serverbrowser.cpp:308
CCommunityCache m_CommunityCache
Definition serverbrowser.h:347
static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData)
Definition serverbrowser.cpp:120
int m_ServerlistType
Definition serverbrowser.h:368
void RequestCurrentServer(const NETADDR &Addr) const
Definition serverbrowser.cpp:1136
bool SortCompareName(int Index1, int Index2) const
Definition serverbrowser.cpp:352
int LoadingProgression() const override
Definition serverbrowser.cpp:1741
void UpdateFromHttp()
Definition serverbrowser.cpp:1151
int GenerateToken(const NETADDR &Addr) const
Definition serverbrowser.cpp:332
static void Con_LeakIpAddress(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:205
std::vector< int > m_vSortedServerlist
Definition serverbrowser.h:339
const CExcludedCommunityTypeFilterList & TypesFilter() const override
Definition serverbrowser.h:302
void UpdateServerRank(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1677
void SetLatency(NETADDR Addr, int Latency)
Definition serverbrowser.cpp:800
void LoadDDNetServers()
Definition serverbrowser.cpp:1511
IConfigManager * m_pConfigManager
Definition serverbrowser.h:323
void UpdateServerFriends(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1646
const char * m_pHttpPrevBestUrl
Definition serverbrowser.h:335
int m_CurrentMaxRequests
Definition serverbrowser.h:364
bool IsRefreshing() const override
Definition serverbrowser.cpp:1726
void LoadDDNetLocation()
Definition serverbrowser.cpp:1413
IServerBrowserPingCache * m_pPingCache
Definition serverbrowser.h:334
bool IsRegistered(const NETADDR &Addr)
Definition serverbrowser.cpp:2381
const CCommunity * Community(const char *pCommunityId) const override
Definition serverbrowser.cpp:1778
const ICommunityCache & CommunityCache() const override
Definition serverbrowser.h:294
void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion)
Definition serverbrowser.cpp:85
bool IsServerlistError() const override
Definition serverbrowser.cpp:1736
const CServerInfo * SortedGet(int Index) const override
Definition serverbrowser.cpp:318
static bool ParseCommunityFinishes(CCommunity *pCommunity, const json_value &Finishes)
Definition serverbrowser.cpp:1496
void CleanUp()
Definition serverbrowser.cpp:1260
std::unordered_map< NETADDR, int > m_ByAddr
Definition serverbrowser.h:340
int m_NumRequests
Definition serverbrowser.h:358
CServerEntry * m_pFirstReqServer
Definition serverbrowser.h:356
std::vector< CCommunity > m_vCommunities
Definition serverbrowser.h:342
unsigned CurrentCommunitiesHash() const override
Definition serverbrowser.cpp:1834
void UpdateServerCommunity(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1659
CFavoriteCommunityFilterList m_FavoriteCommunitiesFilter
Definition serverbrowser.h:348
IFriends * m_pFriends
Definition serverbrowser.h:326
void RegisterCommands()
Definition serverbrowser.cpp:106
CServerEntry * m_pLastReqServer
Definition serverbrowser.h:357
void Filter()
Definition serverbrowser.cpp:420
int NumSortedPlayers() const override
Definition serverbrowser.h:269
std::optional< SHA256_DIGEST > DDNetInfoSha256() const override
Definition serverbrowser.h:291
~CServerBrowser() override
Definition serverbrowser.cpp:75
bool SortComparePing(int Index1, int Index2) const
Definition serverbrowser.cpp:368
int NumSortedServers() const override
Definition serverbrowser.h:268
void SetInfo(CServerEntry *pEntry, const CServerInfo &Info) const
Definition serverbrowser.cpp:725
CServerEntry * Add(const NETADDR *pAddrs, int NumAddrs)
Definition serverbrowser.cpp:836
IStorage * m_pStorage
Definition serverbrowser.h:328
const std::vector< CCommunity > & Communities() const override
Definition serverbrowser.cpp:1773
CExcludedCommunityTypeFilterList m_TypesFilter
Definition serverbrowser.h:351
void RequestResort()
Definition serverbrowser.h:262
CExcludedCommunityCountryFilterList & CountriesFilter() override
Definition serverbrowser.h:297
bool SortCompareNumFriends(int Index1, int Index2) const
Definition serverbrowser.cpp:396
bool SortCompareMap(int Index1, int Index2) const
Definition serverbrowser.cpp:361
void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const
Definition serverbrowser.cpp:1066
std::unordered_map< NETADDR, CCommunityServer > m_CommunityServersByAddr
Definition serverbrowser.h:343
int SortHash() const
Definition serverbrowser.cpp:616
std::vector< const CCommunity * > CurrentCommunities() const override
Definition serverbrowser.cpp:1815
void RequestCurrentServerWithRandomToken(const NETADDR &Addr, int *pBasicToken, int *pToken) const
Definition serverbrowser.cpp:1141
int m_NumSortedPlayers
Definition serverbrowser.h:366
void Refresh(int Type, bool Force=false) override
Definition serverbrowser.cpp:996
bool SortCompareNumClients(int Index1, int Index2) const
Definition serverbrowser.cpp:389
static int GetBasicToken(int Token)
Definition serverbrowser.cpp:342
void QueueRequest(CServerEntry *pEntry)
Definition serverbrowser.cpp:693
void UpdateServerFilteredPlayers(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1633
void CleanFilters() override
Definition serverbrowser.cpp:2370
bool DDNetInfoAvailable() const override
Definition serverbrowser.h:290
int Max(const CServerInfo &Item) const override
Definition serverbrowser.cpp:313
IEngine * m_pEngine
Definition serverbrowser.h:325
std::vector< const CCommunity * > SelectedCommunities() const override
Definition serverbrowser.cpp:1786
static void Con_AddFavoriteCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:129
CNetClient * m_pNetClient
Definition serverbrowser.h:322
const json_value * LoadDDNetInfo()
Definition serverbrowser.cpp:1368
char m_aNetVersion[128]
Definition serverbrowser.h:330
static void Con_RemoveExcludedCountry(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:175
CExcludedCommunityTypeFilterList & TypesFilter() override
Definition serverbrowser.h:298
bool SortCompareNumPlayersAndPing(int Index1, int Index2) const
Definition serverbrowser.cpp:407
const CExcludedCommunityCountryFilterList & CountriesFilter() const override
Definition serverbrowser.h:301
const CFavoriteCommunityFilterList & FavoriteCommunitiesFilter() const override
Definition serverbrowser.h:299
IHttp * m_pHttpClient
Definition serverbrowser.h:329
json_value * m_pDDNetInfo
Definition serverbrowser.h:353
void SetHttpInfo(const CServerInfo *pInfo)
int m_Sorthash
Definition serverbrowser.h:361
bool m_NeedResort
Definition serverbrowser.h:360
bool ValidateCountryName(const char *pCountryName) const
Definition serverbrowser.cpp:298
const char * GetTutorialServer() override
Definition serverbrowser.cpp:1698
void OnInit()
Definition serverbrowser.cpp:101
void LoadDDNetInfoJson()
Definition serverbrowser.cpp:1383
CServerBrowser()
Definition serverbrowser.cpp:60
const CServerInfo * Get(int Index) const override
Definition serverbrowser.cpp:325
static void Con_RemoveExcludedCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:156
bool SortCompareNumPlayers(int Index1, int Index2) const
Definition serverbrowser.cpp:382
CServerEntry * Find(const NETADDR &Addr) override
Definition serverbrowser.cpp:683
CExcludedCommunityFilterList m_CommunitiesFilter
Definition serverbrowser.h:349
std::optional< SHA256_DIGEST > m_DDNetInfoSha256
Definition serverbrowser.h:354
IConsole * m_pConsole
Definition serverbrowser.h:324
static void Con_AddExcludedCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:147
CHeap m_ServerlistHeap
Definition serverbrowser.h:337
bool SortCompareGametype(int Index1, int Index2) const
Definition serverbrowser.cpp:375
bool ValidateTypeName(const char *pTypeName) const
Definition serverbrowser.cpp:303
static void Con_AddExcludedType(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:185
IServerBrowserHttp * m_pHttp
Definition serverbrowser.h:333
bool m_RefreshingHttp
Definition serverbrowser.h:332
void Update()
Definition serverbrowser.cpp:1274
bool ValidateCommunityId(const char *pCommunityId) const
Definition serverbrowser.cpp:293
void Sort()
Definition serverbrowser.cpp:633
unsigned char m_aTokenSeed[16]
Definition serverbrowser.h:370
void SetCurrentServerPing(const NETADDR &Addr, int Ping)
Definition serverbrowser.cpp:1146
static int GetExtraToken(int Token)
Definition serverbrowser.cpp:347
static void Con_AddExcludedCountry(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:165
ICommunityCache & CommunityCache() override
Definition serverbrowser.h:293
int m_OwnLocation
Definition serverbrowser.h:345
std::vector< const CCommunity * > FavoriteCommunities() const override
Definition serverbrowser.cpp:1799
int GetCurrentType() override
Definition serverbrowser.h:318
const CExcludedCommunityFilterList & CommunitiesFilter() const override
Definition serverbrowser.h:300
Definition serverbrowser.h:26
@ MAX_COMMUNITY_ID_LENGTH
Definition serverbrowser.h:62
@ MAX_COMMUNITY_TYPE_LENGTH
Definition serverbrowser.h:64
@ MAX_COMMUNITY_COUNTRY_LENGTH
Definition serverbrowser.h:63
@ LOC_UNKNOWN
Definition serverbrowser.h:30
Definition serverbrowser.h:259
Definition config.h:9
Definition console.h:64
Definition console.h:20
Definition engine.h:15
Definition favorites.h:15
Definition serverbrowser.h:248
Definition friends.h:19
Definition http.h:13
Definition serverbrowser_http.h:11
Definition serverbrowser_ping_cache.h:9
Definition serverbrowser.h:320
Definition serverbrowser.h:272
static constexpr const char * COMMUNITY_ALL
Definition serverbrowser.h:340
@ NUM_TYPES
Definition serverbrowser.h:310
Definition storage.h:21
struct _json_value json_value
Definition serverbrowser.h:18
int str_comp(const char *a, const char *b)
Definition str.cpp:326
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:6
unsigned str_quickhash(const char *str)
Definition str.cpp:852
Definition types.h:72
size_t operator()(const CCommunityCountryName &Elem) const noexcept
Definition serverbrowser.h:88
size_t operator()(const CCommunityId &Elem) const noexcept
Definition serverbrowser.h:56
size_t operator()(const CCommunityTypeName &Elem) const noexcept
Definition serverbrowser.h:120