DDNet 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/str.h>
8
9#include <engine/console.h>
11
12#include <deque>
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 Shutdown() override;
258 void Refresh(int Type, bool Force = false) override;
259 bool IsRefreshing() const override;
260 bool IsGettingServerlist() const override;
261 bool IsServerlistError() const override;
262 int LoadingProgression() const override;
263 void RequestResort() { m_NeedResort = true; }
264
265 int NumServers() const override { return m_vpServerlist.size(); }
266 const CServerInfo *Get(int Index) const override;
267 int Players(const CServerInfo &Item) const override;
268 int Max(const CServerInfo &Item) const override;
269 int NumSortedServers() const override { return m_vSortedServerlist.size(); }
270 int NumSortedPlayers() const override { return m_NumSortedPlayers; }
271 const CServerInfo *SortedGet(int Index) const override;
272
273 const json_value *LoadDDNetInfo();
274 void LoadDDNetInfoJson();
275 void LoadDDNetLocation();
276 void LoadDDNetServers();
277 void UpdateServerFilteredPlayers(CServerInfo *pInfo) const;
278 void UpdateServerFriends(CServerInfo *pInfo) const;
279 void UpdateServerCommunity(CServerInfo *pInfo) const;
280 void UpdateServerRank(CServerInfo *pInfo) const;
281 void UpdateServerLatency(CServerInfo *pInfo, int OwnLocation) const;
282 int DetermineOwnLocation() const;
284 const char *GetTutorialServer() override;
285
286 const std::vector<CCommunity> &Communities() const override;
287 const CCommunity *Community(const char *pCommunityId) const override;
288 std::vector<const CCommunity *> SelectedCommunities() const override;
289 std::vector<const CCommunity *> FavoriteCommunities() const override;
290 std::vector<const CCommunity *> CurrentCommunities() const override;
291 unsigned CurrentCommunitiesHash() const override;
292
293 bool DDNetInfoAvailable() const override { return m_pDDNetInfo != nullptr; }
294 std::optional<SHA256_DIGEST> DDNetInfoSha256() const override { return m_DDNetInfoSha256; }
295
297 const ICommunityCache &CommunityCache() const override { return m_CommunityCache; }
306 void CleanFilters() override;
307
308 //
309 void Update();
310 void OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo);
311 void SetHttpInfo(const CServerInfo *pInfo);
312 void RequestCurrentServer(const NETADDR &Addr) const;
313 void RequestCurrentServerWithRandomToken(const NETADDR &Addr, int *pBasicToken, int *pToken) const;
314 void SetCurrentServerPing(const NETADDR &Addr, int Ping);
315
316 void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion);
317 void OnInit();
318
319 void QueueRequest(CServerEntry *pEntry);
320 CServerEntry *Find(const NETADDR &Addr) override;
321 int GetCurrentType() override { return m_ServerlistType; }
322 bool IsRegistered(const NETADDR &Addr);
323
324private:
328 IEngine *m_pEngine = nullptr;
333 char m_aNetVersion[128];
334
335 bool m_RefreshingHttp = false;
338 const char *m_pHttpPrevBestUrl = nullptr;
339
340 // Entries are owned by m_ServerlistStorage; m_vpServerlist holds non-owning
341 // pointers into it. std::deque keeps element pointers stable across growth,
342 // which the request list (m_pPrevReq/m_pNextReq) and m_vpServerlist rely on.
343 std::deque<CServerEntry> m_ServerlistStorage;
344 std::vector<CServerEntry *> m_vpServerlist;
345 std::vector<int> m_vSortedServerlist;
346 std::unordered_map<NETADDR, int> m_ByAddr;
347
348 std::vector<CCommunity> m_vCommunities;
349 std::unordered_map<NETADDR, CCommunityServer> m_CommunityServersByAddr;
350
352
358
360 std::optional<SHA256_DIGEST> m_DDNetInfoSha256;
361
365
368
369 // used instead of g_Config.br_max_requests to get more servers
371
373
376 unsigned char m_aTokenSeed[16];
377
378 int GenerateToken(const NETADDR &Addr) const;
379 static int GetBasicToken(int Token);
380 static int GetExtraToken(int Token);
381
382 // sorting criteria
383 bool SortCompareName(int Index1, int Index2) const;
384 bool SortCompareMap(int Index1, int Index2) const;
385 bool SortComparePing(int Index1, int Index2) const;
386 bool SortCompareGametype(int Index1, int Index2) const;
387 bool SortCompareNumPlayers(int Index1, int Index2) const;
388 bool SortCompareNumClients(int Index1, int Index2) const;
389 bool SortCompareNumFriends(int Index1, int Index2) const;
390 bool SortCompareNumPlayersAndPing(int Index1, int Index2) const;
391 bool SortCompareFavoritesNumPlayersAndPing(int Index1, int Index2) const;
392
393 //
394 void Filter();
395 void Sort();
396 int SortHash() const;
397
398 void CleanUp();
399
400 void UpdateFromHttp();
401 CServerEntry *Add(const NETADDR *pAddrs, int NumAddrs);
402 CServerEntry *ReplaceEntry(CServerEntry *pEntry, const NETADDR *pAddrs, int NumAddrs);
403
404 void RemoveRequest(CServerEntry *pEntry);
405
406 void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const;
407
408 void RegisterCommands();
409 static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData);
410 static void Con_AddFavoriteCommunity(IConsole::IResult *pResult, void *pUserData);
411 static void Con_RemoveFavoriteCommunity(IConsole::IResult *pResult, void *pUserData);
412 static void Con_AddExcludedCommunity(IConsole::IResult *pResult, void *pUserData);
413 static void Con_RemoveExcludedCommunity(IConsole::IResult *pResult, void *pUserData);
414 static void Con_AddExcludedCountry(IConsole::IResult *pResult, void *pUserData);
415 static void Con_RemoveExcludedCountry(IConsole::IResult *pResult, void *pUserData);
416 static void Con_AddExcludedType(IConsole::IResult *pResult, void *pUserData);
417 static void Con_RemoveExcludedType(IConsole::IResult *pResult, void *pUserData);
418 static void Con_LeakIpAddress(IConsole::IResult *pResult, void *pUserData);
419
420 bool ValidateCommunityId(const char *pCommunityId) const;
421 bool ValidateCountryName(const char *pCountryName) const;
422 bool ValidateTypeName(const char *pTypeName) const;
423
424 void SetInfo(CServerEntry *pEntry, const CServerInfo &Info) const;
425 void SetLatency(NETADDR Addr, int Latency);
426
427 static bool ParseCommunityFinishes(CCommunity *pCommunity, const json_value &Finishes);
428 static bool ParseCommunityServers(CCommunity *pCommunity, const json_value &Servers);
429};
430
431#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:1890
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:220
Definition serverbrowser.h:177
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2240
CExcludedCommunityCountryFilterList(const ICommunityCache *pCommunityCache)
Definition serverbrowser.h:179
bool Empty() const override
Definition serverbrowser.cpp:2158
void Add(const char *pCountryName) override
Definition serverbrowser.cpp:2099
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2166
std::map< CCommunityId, std::set< CCommunityCountryName > > m_Entries
Definition serverbrowser.h:196
bool Filtered(const char *pCountryName) const override
Definition serverbrowser.cpp:2148
void Remove(const char *pCountryName) override
Definition serverbrowser.cpp:2125
void Clear() override
Definition serverbrowser.cpp:2139
const ICommunityCache * m_pCommunityCache
Definition serverbrowser.h:195
Definition serverbrowser.h:162
bool Empty() const override
Definition serverbrowser.cpp:2059
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2087
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2064
void Clear() override
Definition serverbrowser.cpp:2049
void Add(const char *pCommunityId) override
Definition serverbrowser.cpp:2039
bool Filtered(const char *pCommunityId) const override
Definition serverbrowser.cpp:2054
std::set< CCommunityId > m_Entries
Definition serverbrowser.h:173
void Remove(const char *pCommunityId) override
Definition serverbrowser.cpp:2044
Definition serverbrowser.h:200
void Clear() override
Definition serverbrowser.cpp:2297
void Add(const char *pTypeName) override
Definition serverbrowser.cpp:2257
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2324
bool Filtered(const char *pTypeName) const override
Definition serverbrowser.cpp:2306
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2398
std::map< CCommunityId, std::set< CCommunityTypeName > > m_Entries
Definition serverbrowser.h:219
bool Empty() const override
Definition serverbrowser.cpp:2316
void Remove(const char *pTypeName) override
Definition serverbrowser.cpp:2283
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:1980
bool Filtered(const char *pCommunityId) const override
Definition serverbrowser.cpp:1994
bool Empty() const override
Definition serverbrowser.cpp:1999
void Clear() override
Definition serverbrowser.cpp:1989
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2004
void Add(const char *pCommunityId) override
Definition serverbrowser.cpp:1962
const std::vector< CCommunityId > & Entries() const
Definition serverbrowser.cpp:2026
std::vector< CCommunityId > m_vEntries
Definition serverbrowser.h:158
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2014
Definition network.h:613
int NumServers() const override
Definition serverbrowser.h:265
CFavoriteCommunityFilterList & FavoriteCommunitiesFilter() override
Definition serverbrowser.h:298
static void Con_RemoveExcludedType(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:204
void Shutdown() override
Definition serverbrowser.cpp:89
CExcludedCommunityFilterList & CommunitiesFilter() override
Definition serverbrowser.h:299
CExcludedCommunityCountryFilterList m_CountriesFilter
Definition serverbrowser.h:356
int64_t m_BroadcastTime
Definition serverbrowser.h:375
void OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo)
Definition serverbrowser.cpp:923
CServerEntry * ReplaceEntry(CServerEntry *pEntry, const NETADDR *pAddrs, int NumAddrs)
Definition serverbrowser.cpp:895
static bool ParseCommunityServers(CCommunity *pCommunity, const json_value &Servers)
Definition serverbrowser.cpp:1433
IFavorites * m_pFavorites
Definition serverbrowser.h:330
void ValidateServerlistType()
Definition serverbrowser.cpp:1729
static void Con_RemoveFavoriteCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:147
std::vector< CServerEntry * > m_vpServerlist
Definition serverbrowser.h:344
void RemoveRequest(CServerEntry *pEntry)
Definition serverbrowser.cpp:685
bool IsGettingServerlist() const override
Definition serverbrowser.cpp:1777
int Players(const CServerInfo &Item) const override
Definition serverbrowser.cpp:317
CCommunityCache m_CommunityCache
Definition serverbrowser.h:353
static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData)
Definition serverbrowser.cpp:129
int m_ServerlistType
Definition serverbrowser.h:374
void RequestCurrentServer(const NETADDR &Addr) const
Definition serverbrowser.cpp:1158
bool SortCompareName(int Index1, int Index2) const
Definition serverbrowser.cpp:361
int LoadingProgression() const override
Definition serverbrowser.cpp:1787
void UpdateFromHttp()
Definition serverbrowser.cpp:1173
int GenerateToken(const NETADDR &Addr) const
Definition serverbrowser.cpp:341
static void Con_LeakIpAddress(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:214
std::vector< int > m_vSortedServerlist
Definition serverbrowser.h:345
const CExcludedCommunityTypeFilterList & TypesFilter() const override
Definition serverbrowser.h:305
void UpdateServerRank(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1694
void SetLatency(NETADDR Addr, int Latency)
Definition serverbrowser.cpp:823
void LoadDDNetServers()
Definition serverbrowser.cpp:1528
IConfigManager * m_pConfigManager
Definition serverbrowser.h:326
void UpdateServerFriends(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1663
const char * m_pHttpPrevBestUrl
Definition serverbrowser.h:338
int m_CurrentMaxRequests
Definition serverbrowser.h:370
bool IsRefreshing() const override
Definition serverbrowser.cpp:1772
void LoadDDNetLocation()
Definition serverbrowser.cpp:1420
IServerBrowserPingCache * m_pPingCache
Definition serverbrowser.h:337
bool IsRegistered(const NETADDR &Addr)
Definition serverbrowser.cpp:2426
const CCommunity * Community(const char *pCommunityId) const override
Definition serverbrowser.cpp:1824
const ICommunityCache & CommunityCache() const override
Definition serverbrowser.h:297
void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion)
Definition serverbrowser.cpp:94
bool IsServerlistError() const override
Definition serverbrowser.cpp:1782
const CServerInfo * SortedGet(int Index) const override
Definition serverbrowser.cpp:327
static bool ParseCommunityFinishes(CCommunity *pCommunity, const json_value &Finishes)
Definition serverbrowser.cpp:1513
void CleanUp()
Definition serverbrowser.cpp:1260
std::unordered_map< NETADDR, int > m_ByAddr
Definition serverbrowser.h:346
int m_NumRequests
Definition serverbrowser.h:364
CServerEntry * m_pFirstReqServer
Definition serverbrowser.h:362
std::vector< CCommunity > m_vCommunities
Definition serverbrowser.h:348
unsigned CurrentCommunitiesHash() const override
Definition serverbrowser.cpp:1880
void UpdateServerCommunity(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1676
CFavoriteCommunityFilterList m_FavoriteCommunitiesFilter
Definition serverbrowser.h:354
IFriends * m_pFriends
Definition serverbrowser.h:329
void RegisterCommands()
Definition serverbrowser.cpp:115
CServerEntry * m_pLastReqServer
Definition serverbrowser.h:363
void Filter()
Definition serverbrowser.cpp:440
int NumSortedPlayers() const override
Definition serverbrowser.h:270
std::optional< SHA256_DIGEST > DDNetInfoSha256() const override
Definition serverbrowser.h:294
bool SortComparePing(int Index1, int Index2) const
Definition serverbrowser.cpp:377
int NumSortedServers() const override
Definition serverbrowser.h:269
void SetInfo(CServerEntry *pEntry, const CServerInfo &Info) const
Definition serverbrowser.cpp:747
CServerEntry * Add(const NETADDR *pAddrs, int NumAddrs)
Definition serverbrowser.cpp:859
IStorage * m_pStorage
Definition serverbrowser.h:331
const std::vector< CCommunity > & Communities() const override
Definition serverbrowser.cpp:1819
CExcludedCommunityTypeFilterList m_TypesFilter
Definition serverbrowser.h:357
void RequestResort()
Definition serverbrowser.h:263
CExcludedCommunityCountryFilterList & CountriesFilter() override
Definition serverbrowser.h:300
bool SortCompareNumFriends(int Index1, int Index2) const
Definition serverbrowser.cpp:405
bool SortCompareMap(int Index1, int Index2) const
Definition serverbrowser.cpp:370
void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const
Definition serverbrowser.cpp:1088
std::unordered_map< NETADDR, CCommunityServer > m_CommunityServersByAddr
Definition serverbrowser.h:349
int SortHash() const
Definition serverbrowser.cpp:636
std::vector< const CCommunity * > CurrentCommunities() const override
Definition serverbrowser.cpp:1861
void RequestCurrentServerWithRandomToken(const NETADDR &Addr, int *pBasicToken, int *pToken) const
Definition serverbrowser.cpp:1163
int m_NumSortedPlayers
Definition serverbrowser.h:372
void Refresh(int Type, bool Force=false) override
Definition serverbrowser.cpp:1018
bool SortCompareNumClients(int Index1, int Index2) const
Definition serverbrowser.cpp:398
static int GetBasicToken(int Token)
Definition serverbrowser.cpp:351
void QueueRequest(CServerEntry *pEntry)
Definition serverbrowser.cpp:715
void UpdateServerFilteredPlayers(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1650
void CleanFilters() override
Definition serverbrowser.cpp:2415
bool DDNetInfoAvailable() const override
Definition serverbrowser.h:293
int Max(const CServerInfo &Item) const override
Definition serverbrowser.cpp:322
IEngine * m_pEngine
Definition serverbrowser.h:328
std::vector< const CCommunity * > SelectedCommunities() const override
Definition serverbrowser.cpp:1832
static void Con_AddFavoriteCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:138
CNetClient * m_pNetClient
Definition serverbrowser.h:325
const json_value * LoadDDNetInfo()
Definition serverbrowser.cpp:1368
char m_aNetVersion[128]
Definition serverbrowser.h:333
static void Con_RemoveExcludedCountry(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:184
CExcludedCommunityTypeFilterList & TypesFilter() override
Definition serverbrowser.h:301
bool SortCompareNumPlayersAndPing(int Index1, int Index2) const
Definition serverbrowser.cpp:416
const CExcludedCommunityCountryFilterList & CountriesFilter() const override
Definition serverbrowser.h:304
const CFavoriteCommunityFilterList & FavoriteCommunitiesFilter() const override
Definition serverbrowser.h:302
bool SortCompareFavoritesNumPlayersAndPing(int Index1, int Index2) const
Definition serverbrowser.cpp:429
IHttp * m_pHttpClient
Definition serverbrowser.h:332
json_value * m_pDDNetInfo
Definition serverbrowser.h:359
void SetHttpInfo(const CServerInfo *pInfo)
int m_Sorthash
Definition serverbrowser.h:367
bool m_NeedResort
Definition serverbrowser.h:366
bool ValidateCountryName(const char *pCountryName) const
Definition serverbrowser.cpp:307
const char * GetTutorialServer() override
Definition serverbrowser.cpp:1744
void OnInit()
Definition serverbrowser.cpp:110
void LoadDDNetInfoJson()
Definition serverbrowser.cpp:1390
CServerBrowser()
Definition serverbrowser.cpp:64
const CServerInfo * Get(int Index) const override
Definition serverbrowser.cpp:334
static void Con_RemoveExcludedCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:165
bool SortCompareNumPlayers(int Index1, int Index2) const
Definition serverbrowser.cpp:391
CServerEntry * Find(const NETADDR &Addr) override
Definition serverbrowser.cpp:705
void UpdateServerLatency(CServerInfo *pInfo, int OwnLocation) const
Definition serverbrowser.cpp:1700
CExcludedCommunityFilterList m_CommunitiesFilter
Definition serverbrowser.h:355
std::optional< SHA256_DIGEST > m_DDNetInfoSha256
Definition serverbrowser.h:360
IConsole * m_pConsole
Definition serverbrowser.h:327
static void Con_AddExcludedCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:156
std::deque< CServerEntry > m_ServerlistStorage
Definition serverbrowser.h:343
bool SortCompareGametype(int Index1, int Index2) const
Definition serverbrowser.cpp:384
bool ValidateTypeName(const char *pTypeName) const
Definition serverbrowser.cpp:312
static void Con_AddExcludedType(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:194
IServerBrowserHttp * m_pHttp
Definition serverbrowser.h:336
bool m_RefreshingHttp
Definition serverbrowser.h:335
int DetermineOwnLocation() const
Definition serverbrowser.cpp:1714
void Update()
Definition serverbrowser.cpp:1274
bool ValidateCommunityId(const char *pCommunityId) const
Definition serverbrowser.cpp:302
void Sort()
Definition serverbrowser.cpp:653
unsigned char m_aTokenSeed[16]
Definition serverbrowser.h:376
void SetCurrentServerPing(const NETADDR &Addr, int Ping)
Definition serverbrowser.cpp:1168
static int GetExtraToken(int Token)
Definition serverbrowser.cpp:356
static void Con_AddExcludedCountry(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:174
ICommunityCache & CommunityCache() override
Definition serverbrowser.h:296
int m_OwnLocation
Definition serverbrowser.h:351
std::vector< const CCommunity * > FavoriteCommunities() const override
Definition serverbrowser.cpp:1845
int GetCurrentType() override
Definition serverbrowser.h:321
const CExcludedCommunityFilterList & CommunitiesFilter() const override
Definition serverbrowser.h:303
Definition serverbrowser.h:27
@ MAX_COMMUNITY_ID_LENGTH
Definition serverbrowser.h:63
@ MAX_COMMUNITY_TYPE_LENGTH
Definition serverbrowser.h:65
@ MAX_COMMUNITY_COUNTRY_LENGTH
Definition serverbrowser.h:64
@ LOC_UNKNOWN
Definition serverbrowser.h:31
Definition serverbrowser.h:267
Definition config.h:9
Definition console.h:66
Definition console.h:22
Definition engine.h:15
Definition favorites.h:15
Definition serverbrowser.h:256
Definition friends.h:19
Definition http.h:256
Definition serverbrowser_http.h:11
Definition serverbrowser_ping_cache.h:9
Definition serverbrowser.h:330
Definition serverbrowser.h:280
static constexpr const char * COMMUNITY_ALL
Definition serverbrowser.h:350
@ NUM_TYPES
Definition serverbrowser.h:320
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:373
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:18
unsigned str_quickhash(const char *str)
Definition str.cpp:901
Definition types.h:168
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