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>
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;
280 void UpdateServerLatency(CServerInfo *pInfo, int OwnLocation) const;
281 int DetermineOwnLocation() const;
283 const char *GetTutorialServer() override;
284
285 const std::vector<CCommunity> &Communities() const override;
286 const CCommunity *Community(const char *pCommunityId) const override;
287 std::vector<const CCommunity *> SelectedCommunities() const override;
288 std::vector<const CCommunity *> FavoriteCommunities() const override;
289 std::vector<const CCommunity *> CurrentCommunities() const override;
290 unsigned CurrentCommunitiesHash() const override;
291
292 bool DDNetInfoAvailable() const override { return m_pDDNetInfo != nullptr; }
293 std::optional<SHA256_DIGEST> DDNetInfoSha256() const override { return m_DDNetInfoSha256; }
294
296 const ICommunityCache &CommunityCache() const override { return m_CommunityCache; }
305 void CleanFilters() override;
306
307 //
308 void Update();
309 void OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo);
310 void SetHttpInfo(const CServerInfo *pInfo);
311 void RequestCurrentServer(const NETADDR &Addr) const;
312 void RequestCurrentServerWithRandomToken(const NETADDR &Addr, int *pBasicToken, int *pToken) const;
313 void SetCurrentServerPing(const NETADDR &Addr, int Ping);
314
315 void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion);
316 void OnInit();
317
318 void QueueRequest(CServerEntry *pEntry);
319 CServerEntry *Find(const NETADDR &Addr) override;
320 int GetCurrentType() override { return m_ServerlistType; }
321 bool IsRegistered(const NETADDR &Addr);
322
323private:
327 IEngine *m_pEngine = nullptr;
332 char m_aNetVersion[128];
333
334 bool m_RefreshingHttp = false;
337 const char *m_pHttpPrevBestUrl = nullptr;
338
340 std::vector<CServerEntry *> m_vpServerlist;
341 std::vector<int> m_vSortedServerlist;
342 std::unordered_map<NETADDR, int> m_ByAddr;
343
344 std::vector<CCommunity> m_vCommunities;
345 std::unordered_map<NETADDR, CCommunityServer> m_CommunityServersByAddr;
346
348
354
356 std::optional<SHA256_DIGEST> m_DDNetInfoSha256;
357
361
364
365 // used instead of g_Config.br_max_requests to get more servers
367
369
372 unsigned char m_aTokenSeed[16];
373
374 int GenerateToken(const NETADDR &Addr) const;
375 static int GetBasicToken(int Token);
376 static int GetExtraToken(int Token);
377
378 // sorting criteria
379 bool SortCompareName(int Index1, int Index2) const;
380 bool SortCompareMap(int Index1, int Index2) const;
381 bool SortComparePing(int Index1, int Index2) const;
382 bool SortCompareGametype(int Index1, int Index2) const;
383 bool SortCompareNumPlayers(int Index1, int Index2) const;
384 bool SortCompareNumClients(int Index1, int Index2) const;
385 bool SortCompareNumFriends(int Index1, int Index2) const;
386 bool SortCompareNumPlayersAndPing(int Index1, int Index2) const;
387 bool SortCompareFavoritesNumPlayersAndPing(int Index1, int Index2) const;
388
389 //
390 void Filter();
391 void Sort();
392 int SortHash() const;
393
394 void CleanUp();
395
396 void UpdateFromHttp();
397 CServerEntry *Add(const NETADDR *pAddrs, int NumAddrs);
398 CServerEntry *ReplaceEntry(CServerEntry *pEntry, const NETADDR *pAddrs, int NumAddrs);
399
400 void RemoveRequest(CServerEntry *pEntry);
401
402 void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const;
403
404 void RegisterCommands();
405 static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData);
406 static void Con_AddFavoriteCommunity(IConsole::IResult *pResult, void *pUserData);
407 static void Con_RemoveFavoriteCommunity(IConsole::IResult *pResult, void *pUserData);
408 static void Con_AddExcludedCommunity(IConsole::IResult *pResult, void *pUserData);
409 static void Con_RemoveExcludedCommunity(IConsole::IResult *pResult, void *pUserData);
410 static void Con_AddExcludedCountry(IConsole::IResult *pResult, void *pUserData);
411 static void Con_RemoveExcludedCountry(IConsole::IResult *pResult, void *pUserData);
412 static void Con_AddExcludedType(IConsole::IResult *pResult, void *pUserData);
413 static void Con_RemoveExcludedType(IConsole::IResult *pResult, void *pUserData);
414 static void Con_LeakIpAddress(IConsole::IResult *pResult, void *pUserData);
415
416 bool ValidateCommunityId(const char *pCommunityId) const;
417 bool ValidateCountryName(const char *pCountryName) const;
418 bool ValidateTypeName(const char *pTypeName) const;
419
420 void SetInfo(CServerEntry *pEntry, const CServerInfo &Info) const;
421 void SetLatency(NETADDR Addr, int Latency);
422
423 static bool ParseCommunityFinishes(CCommunity *pCommunity, const json_value &Finishes);
424 static bool ParseCommunityServers(CCommunity *pCommunity, const json_value &Servers);
425};
426
427#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:1886
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:221
Definition serverbrowser.h:177
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2236
CExcludedCommunityCountryFilterList(const ICommunityCache *pCommunityCache)
Definition serverbrowser.h:179
bool Empty() const override
Definition serverbrowser.cpp:2154
void Add(const char *pCountryName) override
Definition serverbrowser.cpp:2095
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2162
std::map< CCommunityId, std::set< CCommunityCountryName > > m_Entries
Definition serverbrowser.h:196
bool Filtered(const char *pCountryName) const override
Definition serverbrowser.cpp:2144
void Remove(const char *pCountryName) override
Definition serverbrowser.cpp:2121
void Clear() override
Definition serverbrowser.cpp:2135
const ICommunityCache * m_pCommunityCache
Definition serverbrowser.h:195
Definition serverbrowser.h:162
bool Empty() const override
Definition serverbrowser.cpp:2055
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2083
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2060
void Clear() override
Definition serverbrowser.cpp:2045
void Add(const char *pCommunityId) override
Definition serverbrowser.cpp:2035
bool Filtered(const char *pCommunityId) const override
Definition serverbrowser.cpp:2050
std::set< CCommunityId > m_Entries
Definition serverbrowser.h:173
void Remove(const char *pCommunityId) override
Definition serverbrowser.cpp:2040
Definition serverbrowser.h:200
void Clear() override
Definition serverbrowser.cpp:2293
void Add(const char *pTypeName) override
Definition serverbrowser.cpp:2253
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2320
bool Filtered(const char *pTypeName) const override
Definition serverbrowser.cpp:2302
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2394
std::map< CCommunityId, std::set< CCommunityTypeName > > m_Entries
Definition serverbrowser.h:219
bool Empty() const override
Definition serverbrowser.cpp:2312
void Remove(const char *pTypeName) override
Definition serverbrowser.cpp:2279
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:1976
bool Filtered(const char *pCommunityId) const override
Definition serverbrowser.cpp:1990
bool Empty() const override
Definition serverbrowser.cpp:1995
void Clear() override
Definition serverbrowser.cpp:1985
void Clean(const std::vector< CCommunity > &vAllowedCommunities)
Definition serverbrowser.cpp:2000
void Add(const char *pCommunityId) override
Definition serverbrowser.cpp:1958
const std::vector< CCommunityId > & Entries() const
Definition serverbrowser.cpp:2022
std::vector< CCommunityId > m_vEntries
Definition serverbrowser.h:158
void Save(IConfigManager *pConfigManager) const
Definition serverbrowser.cpp:2010
Definition memheap.h:11
Definition network.h:582
int NumServers() const override
Definition serverbrowser.h:264
CFavoriteCommunityFilterList & FavoriteCommunitiesFilter() override
Definition serverbrowser.h:297
static void Con_RemoveExcludedType(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:199
CExcludedCommunityFilterList & CommunitiesFilter() override
Definition serverbrowser.h:298
CExcludedCommunityCountryFilterList m_CountriesFilter
Definition serverbrowser.h:352
int64_t m_BroadcastTime
Definition serverbrowser.h:371
void OnServerInfoUpdate(const NETADDR &Addr, int Token, const CServerInfo *pInfo)
Definition serverbrowser.cpp:919
CServerEntry * ReplaceEntry(CServerEntry *pEntry, const NETADDR *pAddrs, int NumAddrs)
Definition serverbrowser.cpp:891
static bool ParseCommunityServers(CCommunity *pCommunity, const json_value &Servers)
Definition serverbrowser.cpp:1429
IFavorites * m_pFavorites
Definition serverbrowser.h:329
void ValidateServerlistType()
Definition serverbrowser.cpp:1725
static void Con_RemoveFavoriteCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:142
std::vector< CServerEntry * > m_vpServerlist
Definition serverbrowser.h:340
void RemoveRequest(CServerEntry *pEntry)
Definition serverbrowser.cpp:680
bool IsGettingServerlist() const override
Definition serverbrowser.cpp:1773
int Players(const CServerInfo &Item) const override
Definition serverbrowser.cpp:312
CCommunityCache m_CommunityCache
Definition serverbrowser.h:349
static void ConfigSaveCallback(IConfigManager *pConfigManager, void *pUserData)
Definition serverbrowser.cpp:124
int m_ServerlistType
Definition serverbrowser.h:370
void RequestCurrentServer(const NETADDR &Addr) const
Definition serverbrowser.cpp:1154
bool SortCompareName(int Index1, int Index2) const
Definition serverbrowser.cpp:356
int LoadingProgression() const override
Definition serverbrowser.cpp:1783
void UpdateFromHttp()
Definition serverbrowser.cpp:1169
int GenerateToken(const NETADDR &Addr) const
Definition serverbrowser.cpp:336
static void Con_LeakIpAddress(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:209
std::vector< int > m_vSortedServerlist
Definition serverbrowser.h:341
const CExcludedCommunityTypeFilterList & TypesFilter() const override
Definition serverbrowser.h:304
void UpdateServerRank(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1690
void SetLatency(NETADDR Addr, int Latency)
Definition serverbrowser.cpp:818
void LoadDDNetServers()
Definition serverbrowser.cpp:1524
IConfigManager * m_pConfigManager
Definition serverbrowser.h:325
void UpdateServerFriends(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1659
const char * m_pHttpPrevBestUrl
Definition serverbrowser.h:337
int m_CurrentMaxRequests
Definition serverbrowser.h:366
bool IsRefreshing() const override
Definition serverbrowser.cpp:1768
void LoadDDNetLocation()
Definition serverbrowser.cpp:1416
IServerBrowserPingCache * m_pPingCache
Definition serverbrowser.h:336
bool IsRegistered(const NETADDR &Addr)
Definition serverbrowser.cpp:2422
const CCommunity * Community(const char *pCommunityId) const override
Definition serverbrowser.cpp:1820
const ICommunityCache & CommunityCache() const override
Definition serverbrowser.h:296
void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion)
Definition serverbrowser.cpp:89
bool IsServerlistError() const override
Definition serverbrowser.cpp:1778
const CServerInfo * SortedGet(int Index) const override
Definition serverbrowser.cpp:322
static bool ParseCommunityFinishes(CCommunity *pCommunity, const json_value &Finishes)
Definition serverbrowser.cpp:1509
void CleanUp()
Definition serverbrowser.cpp:1256
std::unordered_map< NETADDR, int > m_ByAddr
Definition serverbrowser.h:342
int m_NumRequests
Definition serverbrowser.h:360
CServerEntry * m_pFirstReqServer
Definition serverbrowser.h:358
std::vector< CCommunity > m_vCommunities
Definition serverbrowser.h:344
unsigned CurrentCommunitiesHash() const override
Definition serverbrowser.cpp:1876
void UpdateServerCommunity(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1672
CFavoriteCommunityFilterList m_FavoriteCommunitiesFilter
Definition serverbrowser.h:350
IFriends * m_pFriends
Definition serverbrowser.h:328
void RegisterCommands()
Definition serverbrowser.cpp:110
CServerEntry * m_pLastReqServer
Definition serverbrowser.h:359
void Filter()
Definition serverbrowser.cpp:435
int NumSortedPlayers() const override
Definition serverbrowser.h:269
std::optional< SHA256_DIGEST > DDNetInfoSha256() const override
Definition serverbrowser.h:293
~CServerBrowser() override
Definition serverbrowser.cpp:79
bool SortComparePing(int Index1, int Index2) const
Definition serverbrowser.cpp:372
int NumSortedServers() const override
Definition serverbrowser.h:268
void SetInfo(CServerEntry *pEntry, const CServerInfo &Info) const
Definition serverbrowser.cpp:742
CServerEntry * Add(const NETADDR *pAddrs, int NumAddrs)
Definition serverbrowser.cpp:854
IStorage * m_pStorage
Definition serverbrowser.h:330
const std::vector< CCommunity > & Communities() const override
Definition serverbrowser.cpp:1815
CExcludedCommunityTypeFilterList m_TypesFilter
Definition serverbrowser.h:353
void RequestResort()
Definition serverbrowser.h:262
CExcludedCommunityCountryFilterList & CountriesFilter() override
Definition serverbrowser.h:299
bool SortCompareNumFriends(int Index1, int Index2) const
Definition serverbrowser.cpp:400
bool SortCompareMap(int Index1, int Index2) const
Definition serverbrowser.cpp:365
void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry, int *pBasicToken, int *pToken, bool RandomToken) const
Definition serverbrowser.cpp:1084
std::unordered_map< NETADDR, CCommunityServer > m_CommunityServersByAddr
Definition serverbrowser.h:345
int SortHash() const
Definition serverbrowser.cpp:631
std::vector< const CCommunity * > CurrentCommunities() const override
Definition serverbrowser.cpp:1857
void RequestCurrentServerWithRandomToken(const NETADDR &Addr, int *pBasicToken, int *pToken) const
Definition serverbrowser.cpp:1159
int m_NumSortedPlayers
Definition serverbrowser.h:368
void Refresh(int Type, bool Force=false) override
Definition serverbrowser.cpp:1014
bool SortCompareNumClients(int Index1, int Index2) const
Definition serverbrowser.cpp:393
static int GetBasicToken(int Token)
Definition serverbrowser.cpp:346
void QueueRequest(CServerEntry *pEntry)
Definition serverbrowser.cpp:710
void UpdateServerFilteredPlayers(CServerInfo *pInfo) const
Definition serverbrowser.cpp:1646
void CleanFilters() override
Definition serverbrowser.cpp:2411
bool DDNetInfoAvailable() const override
Definition serverbrowser.h:292
int Max(const CServerInfo &Item) const override
Definition serverbrowser.cpp:317
IEngine * m_pEngine
Definition serverbrowser.h:327
std::vector< const CCommunity * > SelectedCommunities() const override
Definition serverbrowser.cpp:1828
static void Con_AddFavoriteCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:133
CNetClient * m_pNetClient
Definition serverbrowser.h:324
const json_value * LoadDDNetInfo()
Definition serverbrowser.cpp:1364
char m_aNetVersion[128]
Definition serverbrowser.h:332
static void Con_RemoveExcludedCountry(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:179
CExcludedCommunityTypeFilterList & TypesFilter() override
Definition serverbrowser.h:300
bool SortCompareNumPlayersAndPing(int Index1, int Index2) const
Definition serverbrowser.cpp:411
const CExcludedCommunityCountryFilterList & CountriesFilter() const override
Definition serverbrowser.h:303
const CFavoriteCommunityFilterList & FavoriteCommunitiesFilter() const override
Definition serverbrowser.h:301
bool SortCompareFavoritesNumPlayersAndPing(int Index1, int Index2) const
Definition serverbrowser.cpp:424
IHttp * m_pHttpClient
Definition serverbrowser.h:331
json_value * m_pDDNetInfo
Definition serverbrowser.h:355
void SetHttpInfo(const CServerInfo *pInfo)
int m_Sorthash
Definition serverbrowser.h:363
bool m_NeedResort
Definition serverbrowser.h:362
bool ValidateCountryName(const char *pCountryName) const
Definition serverbrowser.cpp:302
const char * GetTutorialServer() override
Definition serverbrowser.cpp:1740
void OnInit()
Definition serverbrowser.cpp:105
void LoadDDNetInfoJson()
Definition serverbrowser.cpp:1386
CServerBrowser()
Definition serverbrowser.cpp:64
const CServerInfo * Get(int Index) const override
Definition serverbrowser.cpp:329
static void Con_RemoveExcludedCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:160
bool SortCompareNumPlayers(int Index1, int Index2) const
Definition serverbrowser.cpp:386
CServerEntry * Find(const NETADDR &Addr) override
Definition serverbrowser.cpp:700
void UpdateServerLatency(CServerInfo *pInfo, int OwnLocation) const
Definition serverbrowser.cpp:1696
CExcludedCommunityFilterList m_CommunitiesFilter
Definition serverbrowser.h:351
std::optional< SHA256_DIGEST > m_DDNetInfoSha256
Definition serverbrowser.h:356
IConsole * m_pConsole
Definition serverbrowser.h:326
static void Con_AddExcludedCommunity(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:151
CHeap m_ServerlistHeap
Definition serverbrowser.h:339
bool SortCompareGametype(int Index1, int Index2) const
Definition serverbrowser.cpp:379
bool ValidateTypeName(const char *pTypeName) const
Definition serverbrowser.cpp:307
static void Con_AddExcludedType(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:189
IServerBrowserHttp * m_pHttp
Definition serverbrowser.h:335
bool m_RefreshingHttp
Definition serverbrowser.h:334
int DetermineOwnLocation() const
Definition serverbrowser.cpp:1710
void Update()
Definition serverbrowser.cpp:1270
bool ValidateCommunityId(const char *pCommunityId) const
Definition serverbrowser.cpp:297
void Sort()
Definition serverbrowser.cpp:648
unsigned char m_aTokenSeed[16]
Definition serverbrowser.h:372
void SetCurrentServerPing(const NETADDR &Addr, int Ping)
Definition serverbrowser.cpp:1164
static int GetExtraToken(int Token)
Definition serverbrowser.cpp:351
static void Con_AddExcludedCountry(IConsole::IResult *pResult, void *pUserData)
Definition serverbrowser.cpp:169
ICommunityCache & CommunityCache() override
Definition serverbrowser.h:295
int m_OwnLocation
Definition serverbrowser.h:347
std::vector< const CCommunity * > FavoriteCommunities() const override
Definition serverbrowser.cpp:1841
int GetCurrentType() override
Definition serverbrowser.h:320
const CExcludedCommunityFilterList & CommunitiesFilter() const override
Definition serverbrowser.h:302
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:268
Definition config.h:9
Definition console.h:66
Definition console.h:22
Definition engine.h:15
Definition favorites.h:15
Definition serverbrowser.h:257
Definition friends.h:19
Definition http.h:14
Definition serverbrowser_http.h:11
Definition serverbrowser_ping_cache.h:9
Definition serverbrowser.h:331
Definition serverbrowser.h:281
static constexpr const char * COMMUNITY_ALL
Definition serverbrowser.h:351
@ NUM_TYPES
Definition serverbrowser.h:321
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:368
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:18
unsigned str_quickhash(const char *str)
Definition str.cpp:894
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