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 int Players(const CServerInfo &Item) const override;
266 int Max(const CServerInfo &Item) const override;
267 int NumSortedServers() const override { return m_vSortedServerlist.size(); }
268 int NumSortedPlayers() const override { return m_NumSortedPlayers; }
269 const CServerInfo *SortedGet(int Index) const override;
270
271 const json_value *LoadDDNetInfo();
272 void LoadDDNetInfoJson();
273 void LoadDDNetLocation();
274 void LoadDDNetServers();
275 void UpdateServerFilteredPlayers(CServerInfo *pInfo) const;
276 void UpdateServerFriends(CServerInfo *pInfo) const;
277 void UpdateServerCommunity(CServerInfo *pInfo) const;
278 void UpdateServerRank(CServerInfo *pInfo) const;
280 const char *GetTutorialServer() override;
281
282 const std::vector<CCommunity> &Communities() const override;
283 const CCommunity *Community(const char *pCommunityId) const override;
284 std::vector<const CCommunity *> SelectedCommunities() const override;
285 std::vector<const CCommunity *> FavoriteCommunities() const override;
286 std::vector<const CCommunity *> CurrentCommunities() const override;
287 unsigned CurrentCommunitiesHash() const override;
288
289 bool DDNetInfoAvailable() const override { return m_pDDNetInfo != nullptr; }
290 std::optional<SHA256_DIGEST> DDNetInfoSha256() const override { return m_DDNetInfoSha256; }
291
293 const ICommunityCache &CommunityCache() const override { return m_CommunityCache; }
302 void CleanFilters() override;
303
304 //
305 void Update();
306 void OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo);
307 void SetHttpInfo(const CServerInfo *pInfo);
308 void RequestCurrentServer(const NETADDR &Addr) const;
309 void RequestCurrentServerWithRandomToken(const NETADDR &Addr, int *pBasicToken, int *pToken) const;
310 void SetCurrentServerPing(const NETADDR &Addr, int Ping);
311
312 void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion);
313 void OnInit();
314
315 void QueueRequest(CServerEntry *pEntry);
316 CServerEntry *Find(const NETADDR &Addr) override;
317 int GetCurrentType() override { return m_ServerlistType; }
318 bool IsRegistered(const NETADDR &Addr);
319
320private:
324 IEngine *m_pEngine = nullptr;
329 char m_aNetVersion[128];
330
331 bool m_RefreshingHttp = false;
334 const char *m_pHttpPrevBestUrl = nullptr;
335
337 std::vector<CServerEntry *> m_vpServerlist;
338 std::vector<int> m_vSortedServerlist;
339 std::unordered_map<NETADDR, int> m_ByAddr;
340
341 std::vector<CCommunity> m_vCommunities;
342 std::unordered_map<NETADDR, CCommunityServer> m_CommunityServersByAddr;
343
345
351
353 std::optional<SHA256_DIGEST> m_DDNetInfoSha256;
354
358
361
362 // used instead of g_Config.br_max_requests to get more servers
364
366
369 unsigned char m_aTokenSeed[16];
370
371 int GenerateToken(const NETADDR &Addr) const;
372 static int GetBasicToken(int Token);
373 static int GetExtraToken(int Token);
374
375 // sorting criteria
376 bool SortCompareName(int Index1, int Index2) const;
377 bool SortCompareMap(int Index1, int Index2) const;
378 bool SortComparePing(int Index1, int Index2) const;
379 bool SortCompareGametype(int Index1, int Index2) const;
380 bool SortCompareNumPlayers(int Index1, int Index2) const;
381 bool SortCompareNumClients(int Index1, int Index2) const;
382 bool SortCompareNumFriends(int Index1, int Index2) const;
383 bool SortCompareNumPlayersAndPing(int Index1, int Index2) const;
384
385 //
386 void Filter();
387 void Sort();
388 int SortHash() const;
389
390 void CleanUp();
391
392 void UpdateFromHttp();
393 CServerEntry *Add(const NETADDR *pAddrs, int NumAddrs);
394 CServerEntry *ReplaceEntry(CServerEntry *pEntry, const NETADDR *pAddrs, int NumAddrs);
395
396 void RemoveRequest(CServerEntry *pEntry);
397
398 void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const;
399
400 void RegisterCommands();
401 static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData);
402 static void Con_AddFavoriteCommunity(IConsole::IResult *pResult, void *pUserData);
403 static void Con_RemoveFavoriteCommunity(IConsole::IResult *pResult, void *pUserData);
404 static void Con_AddExcludedCommunity(IConsole::IResult *pResult, void *pUserData);
405 static void Con_RemoveExcludedCommunity(IConsole::IResult *pResult, void *pUserData);
406 static void Con_AddExcludedCountry(IConsole::IResult *pResult, void *pUserData);
407 static void Con_RemoveExcludedCountry(IConsole::IResult *pResult, void *pUserData);
408 static void Con_AddExcludedType(IConsole::IResult *pResult, void *pUserData);
409 static void Con_RemoveExcludedType(IConsole::IResult *pResult, void *pUserData);
410 static void Con_LeakIpAddress(IConsole::IResult *pResult, void *pUserData);
411
412 bool ValidateCommunityId(const char *pCommunityId) const;
413 bool ValidateCountryName(const char *pCountryName) const;
414 bool ValidateTypeName(const char *pTypeName) const;
415
416 void SetInfo(CServerEntry *pEntry, const CServerInfo &Info) const;
417 void SetLatency(NETADDR Addr, int Latency);
418
419 static bool ParseCommunityFinishes(CCommunity *pCommunity, const json_value &Finishes);
420 static bool ParseCommunityServers(CCommunity *pCommunity, const json_value &Servers);
421};
422
423#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:1817
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:2167
CExcludedCommunityCountryFilterList(const ICommunityCache *pCommunityCache)
Definition serverbrowser.h:179
bool Empty() const override
Definition serverbrowser.cpp:2085
void Add(const char *pCountryName) override
Definition serverbrowser.cpp:2026
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2093
std::map< CCommunityId, std::set< CCommunityCountryName > > m_Entries
Definition serverbrowser.h:196
bool Filtered(const char *pCountryName) const override
Definition serverbrowser.cpp:2075
void Remove(const char *pCountryName) override
Definition serverbrowser.cpp:2052
void Clear() override
Definition serverbrowser.cpp:2066
const ICommunityCache * m_pCommunityCache
Definition serverbrowser.h:195
Definition serverbrowser.h:162
bool Empty() const override
Definition serverbrowser.cpp:1986
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2014
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:1991
void Clear() override
Definition serverbrowser.cpp:1976
void Add(const char *pCommunityId) override
Definition serverbrowser.cpp:1966
bool Filtered(const char *pCommunityId) const override
Definition serverbrowser.cpp:1981
std::set< CCommunityId > m_Entries
Definition serverbrowser.h:173
void Remove(const char *pCommunityId) override
Definition serverbrowser.cpp:1971
Definition serverbrowser.h:200
void Clear() override
Definition serverbrowser.cpp:2224
void Add(const char *pTypeName) override
Definition serverbrowser.cpp:2184
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2251
bool Filtered(const char *pTypeName) const override
Definition serverbrowser.cpp:2233
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2325
std::map< CCommunityId, std::set< CCommunityTypeName > > m_Entries
Definition serverbrowser.h:219
bool Empty() const override
Definition serverbrowser.cpp:2243
void Remove(const char *pTypeName) override
Definition serverbrowser.cpp:2210
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:1907
bool Filtered(const char *pCommunityId) const override
Definition serverbrowser.cpp:1921
bool Empty() const override
Definition serverbrowser.cpp:1926
void Clear() override
Definition serverbrowser.cpp:1916
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:1931
void Add(const char *pCommunityId) override
Definition serverbrowser.cpp:1889
const std::vector< CCommunityId > & Entries() const
Definition serverbrowser.cpp:1953
std::vector< CCommunityId > m_vEntries
Definition serverbrowser.h:158
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:1941
Definition memheap.h:11
Definition network.h:569
int NumServers() const override
Definition serverbrowser.h:264
CFavoriteCommunityFilterList & FavoriteCommunitiesFilter() override
Definition serverbrowser.h:294
static void Con_RemoveExcludedType(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:195
CExcludedCommunityFilterList & CommunitiesFilter() override
Definition serverbrowser.h:295
CExcludedCommunityCountryFilterList m_CountriesFilter
Definition serverbrowser.h:349
int64_t m_BroadcastTime
Definition serverbrowser.h:368
void OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo)
Definition serverbrowser.cpp:874
CServerEntry * ReplaceEntry(CServerEntry *pEntry, const NETADDR *pAddrs, int NumAddrs)
Definition serverbrowser.cpp:846
static bool ParseCommunityServers(CCommunity *pCommunity, const json_value &Servers)
Definition serverbrowser.cpp:1398
IFavorites * m_pFavorites
Definition serverbrowser.h:326
void ValidateServerlistType()
Definition serverbrowser.cpp:1655
static void Con_RemoveFavoriteCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:138
std::vector< CServerEntry * > m_vpServerlist
Definition serverbrowser.h:337
void RemoveRequest(CServerEntry *pEntry)
Definition serverbrowser.cpp:636
bool IsGettingServerlist() const override
Definition serverbrowser.cpp:1703
int Players(const CServerInfo &Item) const override
Definition serverbrowser.cpp:308
CCommunityCache m_CommunityCache
Definition serverbrowser.h:346
static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData)
Definition serverbrowser.cpp:120
int m_ServerlistType
Definition serverbrowser.h:367
void RequestCurrentServer(const NETADDR &Addr) const
Definition serverbrowser.cpp:1109
bool SortCompareName(int Index1, int Index2) const
Definition serverbrowser.cpp:345
int LoadingProgression() const override
Definition serverbrowser.cpp:1713
void UpdateFromHttp()
Definition serverbrowser.cpp:1124
int GenerateToken(const NETADDR &Addr) const
Definition serverbrowser.cpp:325
static void Con_LeakIpAddress(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:205
std::vector< int > m_vSortedServerlist
Definition serverbrowser.h:338
const CExcludedCommunityTypeFilterList & TypesFilter() const override
Definition serverbrowser.h:301
void UpdateServerRank(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1649
void SetLatency(NETADDR Addr, int Latency)
Definition serverbrowser.cpp:773
void LoadDDNetServers()
Definition serverbrowser.cpp:1483
IConfigManager * m_pConfigManager
Definition serverbrowser.h:322
void UpdateServerFriends(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1618
const char * m_pHttpPrevBestUrl
Definition serverbrowser.h:334
int m_CurrentMaxRequests
Definition serverbrowser.h:363
bool IsRefreshing() const override
Definition serverbrowser.cpp:1698
void LoadDDNetLocation()
Definition serverbrowser.cpp:1385
IServerBrowserPingCache * m_pPingCache
Definition serverbrowser.h:333
bool IsRegistered(const NETADDR &Addr)
Definition serverbrowser.cpp:2353
const CCommunity * Community(const char *pCommunityId) const override
Definition serverbrowser.cpp:1750
const ICommunityCache & CommunityCache() const override
Definition serverbrowser.h:293
void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion)
Definition serverbrowser.cpp:85
bool IsServerlistError() const override
Definition serverbrowser.cpp:1708
const CServerInfo * SortedGet(int Index) const override
Definition serverbrowser.cpp:318
static bool ParseCommunityFinishes(CCommunity *pCommunity, const json_value &Finishes)
Definition serverbrowser.cpp:1468
void CleanUp()
Definition serverbrowser.cpp:1233
std::unordered_map< NETADDR, int > m_ByAddr
Definition serverbrowser.h:339
int m_NumRequests
Definition serverbrowser.h:357
CServerEntry * m_pFirstReqServer
Definition serverbrowser.h:355
std::vector< CCommunity > m_vCommunities
Definition serverbrowser.h:341
unsigned CurrentCommunitiesHash() const override
Definition serverbrowser.cpp:1806
void UpdateServerCommunity(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1631
CFavoriteCommunityFilterList m_FavoriteCommunitiesFilter
Definition serverbrowser.h:347
IFriends * m_pFriends
Definition serverbrowser.h:325
void RegisterCommands()
Definition serverbrowser.cpp:106
CServerEntry * m_pLastReqServer
Definition serverbrowser.h:356
void Filter()
Definition serverbrowser.cpp:413
int NumSortedPlayers() const override
Definition serverbrowser.h:268
std::optional< SHA256_DIGEST > DDNetInfoSha256() const override
Definition serverbrowser.h:290
~CServerBrowser() override
Definition serverbrowser.cpp:75
bool SortComparePing(int Index1, int Index2) const
Definition serverbrowser.cpp:361
int NumSortedServers() const override
Definition serverbrowser.h:267
void SetInfo(CServerEntry *pEntry, const CServerInfo &Info) const
Definition serverbrowser.cpp:698
CServerEntry * Add(const NETADDR *pAddrs, int NumAddrs)
Definition serverbrowser.cpp:809
IStorage * m_pStorage
Definition serverbrowser.h:327
const std::vector< CCommunity > & Communities() const override
Definition serverbrowser.cpp:1745
CExcludedCommunityTypeFilterList m_TypesFilter
Definition serverbrowser.h:350
void RequestResort()
Definition serverbrowser.h:262
CExcludedCommunityCountryFilterList & CountriesFilter() override
Definition serverbrowser.h:296
bool SortCompareNumFriends(int Index1, int Index2) const
Definition serverbrowser.cpp:389
bool SortCompareMap(int Index1, int Index2) const
Definition serverbrowser.cpp:354
void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const
Definition serverbrowser.cpp:1039
std::unordered_map< NETADDR, CCommunityServer > m_CommunityServersByAddr
Definition serverbrowser.h:342
int SortHash() const
Definition serverbrowser.cpp:589
std::vector< const CCommunity * > CurrentCommunities() const override
Definition serverbrowser.cpp:1787
void RequestCurrentServerWithRandomToken(const NETADDR &Addr, int *pBasicToken, int *pToken) const
Definition serverbrowser.cpp:1114
int m_NumSortedPlayers
Definition serverbrowser.h:365
void Refresh(int Type, bool Force=false) override
Definition serverbrowser.cpp:969
bool SortCompareNumClients(int Index1, int Index2) const
Definition serverbrowser.cpp:382
static int GetBasicToken(int Token)
Definition serverbrowser.cpp:335
void QueueRequest(CServerEntry *pEntry)
Definition serverbrowser.cpp:666
void UpdateServerFilteredPlayers(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1605
void CleanFilters() override
Definition serverbrowser.cpp:2342
bool DDNetInfoAvailable() const override
Definition serverbrowser.h:289
int Max(const CServerInfo &Item) const override
Definition serverbrowser.cpp:313
IEngine * m_pEngine
Definition serverbrowser.h:324
std::vector< const CCommunity * > SelectedCommunities() const override
Definition serverbrowser.cpp:1758
static void Con_AddFavoriteCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:129
CNetClient * m_pNetClient
Definition serverbrowser.h:321
const json_value * LoadDDNetInfo()
Definition serverbrowser.cpp:1341
char m_aNetVersion[128]
Definition serverbrowser.h:329
static void Con_RemoveExcludedCountry(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:175
CExcludedCommunityTypeFilterList & TypesFilter() override
Definition serverbrowser.h:297
bool SortCompareNumPlayersAndPing(int Index1, int Index2) const
Definition serverbrowser.cpp:400
const CExcludedCommunityCountryFilterList & CountriesFilter() const override
Definition serverbrowser.h:300
const CFavoriteCommunityFilterList & FavoriteCommunitiesFilter() const override
Definition serverbrowser.h:298
IHttp * m_pHttpClient
Definition serverbrowser.h:328
json_value * m_pDDNetInfo
Definition serverbrowser.h:352
void SetHttpInfo(const CServerInfo *pInfo)
int m_Sorthash
Definition serverbrowser.h:360
bool m_NeedResort
Definition serverbrowser.h:359
bool ValidateCountryName(const char *pCountryName) const
Definition serverbrowser.cpp:298
const char * GetTutorialServer() override
Definition serverbrowser.cpp:1670
void OnInit()
Definition serverbrowser.cpp:101
void LoadDDNetInfoJson()
Definition serverbrowser.cpp:1355
CServerBrowser()
Definition serverbrowser.cpp:60
static void Con_RemoveExcludedCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:156
bool SortCompareNumPlayers(int Index1, int Index2) const
Definition serverbrowser.cpp:375
CServerEntry * Find(const NETADDR &Addr) override
Definition serverbrowser.cpp:656
CExcludedCommunityFilterList m_CommunitiesFilter
Definition serverbrowser.h:348
std::optional< SHA256_DIGEST > m_DDNetInfoSha256
Definition serverbrowser.h:353
IConsole * m_pConsole
Definition serverbrowser.h:323
static void Con_AddExcludedCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:147
CHeap m_ServerlistHeap
Definition serverbrowser.h:336
bool SortCompareGametype(int Index1, int Index2) const
Definition serverbrowser.cpp:368
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:332
bool m_RefreshingHttp
Definition serverbrowser.h:331
void Update()
Definition serverbrowser.cpp:1247
bool ValidateCommunityId(const char *pCommunityId) const
Definition serverbrowser.cpp:293
void Sort()
Definition serverbrowser.cpp:606
unsigned char m_aTokenSeed[16]
Definition serverbrowser.h:369
void SetCurrentServerPing(const NETADDR &Addr, int Ping)
Definition serverbrowser.cpp:1119
static int GetExtraToken(int Token)
Definition serverbrowser.cpp:340
static void Con_AddExcludedCountry(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:165
ICommunityCache & CommunityCache() override
Definition serverbrowser.h:292
int m_OwnLocation
Definition serverbrowser.h:344
std::vector< const CCommunity * > FavoriteCommunities() const override
Definition serverbrowser.cpp:1771
int GetCurrentType() override
Definition serverbrowser.h:317
const CExcludedCommunityFilterList & CommunitiesFilter() const override
Definition serverbrowser.h:299
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:257
Definition config.h:9
Definition console.h:64
Definition console.h:20
Definition engine.h:15
Definition favorites.h:15
Definition serverbrowser.h:246
Definition friends.h:19
Definition http.h:13
Definition serverbrowser_http.h:11
Definition serverbrowser_ping_cache.h:9
Definition serverbrowser.h:318
Definition serverbrowser.h:270
static constexpr const char * COMMUNITY_ALL
Definition serverbrowser.h:338
@ NUM_TYPES
Definition serverbrowser.h:308
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