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_SERVERBROWSER_H
4#define ENGINE_SERVERBROWSER_H
5
6#include <base/hash.h>
7#include <base/system.h>
8
9#include <engine/map.h>
11
12#include <generated/protocol7.h>
13
14#include "kernel.h"
15
16#include <unordered_set>
17#include <vector>
18
19static constexpr const char *DDNET_INFO_FILE = "ddnet-info.json";
20static constexpr const char *DDNET_INFO_URL = "https://info.ddnet.org/info";
21
22class CUIElement;
23
25{
26public:
27 enum
28 {
36 // Special case China because it has an exceptionally bad
37 // connection to the outside due to the Great Firewall of
38 // China:
39 // https://en.wikipedia.org/w/index.php?title=Great_Firewall&oldid=1019589632
42 };
43
51
58
59 enum
60 {
64 };
65
86
88
89 int m_Type;
92
95
99
113 int m_Latency; // in ms
115 char m_aGameType[16];
116 char m_aName[64];
120 char m_aVersion[32];
125
126 static int EstimateLatency(int Loc1, int Loc2);
127 static bool ParseLocation(int *pResult, const char *pString);
128};
129
145
147{
148 friend class CServerBrowser;
149
152 std::vector<CCommunityCountryServer> m_vServers;
153
154public:
155 CCommunityCountry(const char *pName, int FlagId) :
157 {
159 }
160
161 const char *Name() const { return m_aName; }
162 int FlagId() const { return m_FlagId; }
163 const std::vector<CCommunityCountryServer> &Servers() const { return m_vServers; }
164};
165
167{
169
170public:
172 {
174 }
175
176 const char *Name() const { return m_aName; }
177};
178
180{
182
183public:
184 CCommunityMap(const char *pName)
185 {
187 }
188
189 const char *Name() const { return m_aName; }
190
191 bool operator==(const CCommunityMap &Other) const
192 {
193 return str_comp(Name(), Other.Name()) == 0;
194 }
195
196 bool operator!=(const CCommunityMap &Other) const
197 {
198 return !(*this == Other);
199 }
200
201 struct SHash
202 {
203 size_t operator()(const CCommunityMap &Map) const
204 {
205 return str_quickhash(Map.Name());
206 }
207 };
208};
209
211{
212 friend class CServerBrowser;
213
215 char m_aName[64];
217 char m_aIconUrl[128];
218 std::vector<CCommunityCountry> m_vCountries;
219 std::vector<CCommunityType> m_vTypes;
220 bool m_HasFinishes = false;
221 std::unordered_set<CCommunityMap, CCommunityMap::SHash> m_FinishedMaps;
222
223public:
224 CCommunity(const char *pId, const char *pName, SHA256_DIGEST IconSha256, const char *pIconUrl) :
226 {
230 }
231
232 const char *Id() const { return m_aId; }
233 const char *Name() const { return m_aName; }
234 const char *IconUrl() const { return m_aIconUrl; }
235 const SHA256_DIGEST &IconSha256() const { return m_IconSha256; }
236 const std::vector<CCommunityCountry> &Countries() const { return m_vCountries; }
237 const std::vector<CCommunityType> &Types() const { return m_vTypes; }
238 bool HasCountry(const char *pCountryName) const;
239 bool HasType(const char *pTypeName) const;
240 bool HasRanks() const { return m_HasFinishes; }
241 CServerInfo::ERankState HasRank(const char *pMap) const;
242};
243
245{
246public:
247 virtual void Add(const char *pElement) = 0;
248 virtual void Remove(const char *pElement) = 0;
249 virtual void Clear() = 0;
250 virtual bool Empty() const = 0;
251 virtual bool Filtered(const char *pElement) const = 0;
252};
253
255{
256public:
257 virtual void Update(bool Force) = 0;
258 virtual const std::vector<const CCommunity *> &SelectedCommunities() const = 0;
259 virtual const std::vector<const CCommunityCountry *> &SelectableCountries() const = 0;
260 virtual const std::vector<const CCommunityType *> &SelectableTypes() const = 0;
261 virtual bool AnyRanksAvailable() const = 0;
262 virtual bool CountriesTypesFilterAvailable() const = 0;
263 virtual const char *CountryTypeFilterKey() const = 0;
264};
265
267{
268 MACRO_INTERFACE("serverbrowser")
269public:
270 /* Constants: Server Browser Sorting
271 SORT_NAME - Sort by name.
272 SORT_PING - Sort by ping.
273 SORT_MAP - Sort by map
274 SORT_GAMETYPE - Sort by game type. DM, TDM etc.
275 SORT_NUMPLAYERS - Sort after how many players there are on the server.
276 SORT_NUMFRIENDS - Sort after how many friends there are on the server.
277 */
278 enum
279 {
286
290
300
303 };
304
316
317 static constexpr const char *COMMUNITY_DDNET = "ddnet";
318 static constexpr const char *COMMUNITY_NONE = "none";
319
320 static constexpr const char *COMMUNITY_COUNTRY_NONE = "none";
321 static constexpr const char *COMMUNITY_TYPE_NONE = "None";
326 static constexpr const char *COMMUNITY_ALL = "all";
327
328 static constexpr const char *SEARCH_EXCLUDE_TOKEN = ";";
329
330 virtual void Refresh(int Type, bool Force = false) = 0;
331 virtual bool IsRefreshing() const = 0;
332 virtual bool IsGettingServerlist() const = 0;
333 virtual bool IsServerlistError() const = 0;
334 virtual int LoadingProgression() const = 0;
335
336 virtual int NumServers() const = 0;
337
338 virtual int Players(const CServerInfo &Item) const = 0;
339 virtual int Max(const CServerInfo &Item) const = 0;
340
341 virtual int NumSortedServers() const = 0;
342 virtual int NumSortedPlayers() const = 0;
343 virtual const CServerInfo *SortedGet(int Index) const = 0;
344
345 virtual const std::vector<CCommunity> &Communities() const = 0;
346 virtual const CCommunity *Community(const char *pCommunityId) const = 0;
347 virtual std::vector<const CCommunity *> SelectedCommunities() const = 0;
348 virtual std::vector<const CCommunity *> FavoriteCommunities() const = 0;
349 virtual std::vector<const CCommunity *> CurrentCommunities() const = 0;
350 virtual unsigned CurrentCommunitiesHash() const = 0;
351
352 virtual bool DDNetInfoAvailable() const = 0;
353 virtual SHA256_DIGEST DDNetInfoSha256() const = 0;
354
356 virtual const ICommunityCache &CommunityCache() const = 0;
360 virtual IFilterList &TypesFilter() = 0;
361 virtual const IFilterList &FavoriteCommunitiesFilter() const = 0;
362 virtual const IFilterList &CommunitiesFilter() const = 0;
363 virtual const IFilterList &CountriesFilter() const = 0;
364 virtual const IFilterList &TypesFilter() const = 0;
365 virtual void CleanFilters() = 0;
366
367 virtual CServerEntry *Find(const NETADDR &Addr) = 0;
368 virtual int GetCurrentType() = 0;
369 virtual const char *GetTutorialServer() = 0;
370};
371
372#endif
Definition serverbrowser.h:131
const char * TypeName() const
Definition serverbrowser.h:143
NETADDR m_Address
Definition serverbrowser.h:132
char m_aTypeName[CServerInfo::MAX_COMMUNITY_TYPE_LENGTH]
Definition serverbrowser.h:133
CCommunityCountryServer(NETADDR Address, const char *pTypeName)
Definition serverbrowser.h:136
NETADDR Address() const
Definition serverbrowser.h:142
Definition serverbrowser.h:147
const char * Name() const
Definition serverbrowser.h:161
const std::vector< CCommunityCountryServer > & Servers() const
Definition serverbrowser.h:163
std::vector< CCommunityCountryServer > m_vServers
Definition serverbrowser.h:152
int m_FlagId
Definition serverbrowser.h:151
int FlagId() const
Definition serverbrowser.h:162
char m_aName[CServerInfo::MAX_COMMUNITY_COUNTRY_LENGTH]
Definition serverbrowser.h:150
CCommunityCountry(const char *pName, int FlagId)
Definition serverbrowser.h:155
Definition serverbrowser.h:180
CCommunityMap(const char *pName)
Definition serverbrowser.h:184
bool operator==(const CCommunityMap &Other) const
Definition serverbrowser.h:191
char m_aName[MAX_MAP_LENGTH]
Definition serverbrowser.h:181
const char * Name() const
Definition serverbrowser.h:189
bool operator!=(const CCommunityMap &Other) const
Definition serverbrowser.h:196
Definition serverbrowser.h:167
const char * Name() const
Definition serverbrowser.h:176
char m_aName[CServerInfo::MAX_COMMUNITY_TYPE_LENGTH]
Definition serverbrowser.h:168
CCommunityType(const char *pName)
Definition serverbrowser.h:171
Definition serverbrowser.h:211
bool HasType(const char *pTypeName) const
Definition serverbrowser.cpp:1725
char m_aIconUrl[128]
Definition serverbrowser.h:217
const char * Name() const
Definition serverbrowser.h:233
SHA256_DIGEST m_IconSha256
Definition serverbrowser.h:216
CCommunity(const char *pId, const char *pName, SHA256_DIGEST IconSha256, const char *pIconUrl)
Definition serverbrowser.h:224
CServerInfo::ERankState HasRank(const char *pMap) const
Definition serverbrowser.cpp:1732
char m_aId[CServerInfo::MAX_COMMUNITY_ID_LENGTH]
Definition serverbrowser.h:214
const std::vector< CCommunityType > & Types() const
Definition serverbrowser.h:237
const std::vector< CCommunityCountry > & Countries() const
Definition serverbrowser.h:236
std::unordered_set< CCommunityMap, CCommunityMap::SHash > m_FinishedMaps
Definition serverbrowser.h:221
bool HasCountry(const char *pCountryName) const
Definition serverbrowser.cpp:1718
std::vector< CCommunityType > m_vTypes
Definition serverbrowser.h:219
const char * Id() const
Definition serverbrowser.h:232
bool HasRanks() const
Definition serverbrowser.h:240
std::vector< CCommunityCountry > m_vCountries
Definition serverbrowser.h:218
const SHA256_DIGEST & IconSha256() const
Definition serverbrowser.h:235
const char * IconUrl() const
Definition serverbrowser.h:234
bool m_HasFinishes
Definition serverbrowser.h:220
char m_aName[64]
Definition serverbrowser.h:215
Definition serverbrowser.h:250
Definition serverbrowser.h:67
int m_aCustomSkinColor7[protocol7::NUM_SKINPARTS]
Definition serverbrowser.h:84
int m_CustomSkinColorFeet
Definition serverbrowser.h:80
bool m_aUseCustomSkinColor7[protocol7::NUM_SKINPARTS]
Definition serverbrowser.h:83
int m_Country
Definition serverbrowser.h:71
char m_aaSkin7[protocol7::NUM_SKINPARTS][protocol7::MAX_SKIN_LENGTH]
Definition serverbrowser.h:82
int m_CustomSkinColorBody
Definition serverbrowser.h:79
char m_aSkin[MAX_SKIN_LENGTH]
Definition serverbrowser.h:77
bool m_Player
Definition serverbrowser.h:73
int m_Score
Definition serverbrowser.h:72
char m_aName[MAX_NAME_LENGTH]
Definition serverbrowser.h:69
bool m_CustomSkinColors
Definition serverbrowser.h:78
int m_FriendState
Definition serverbrowser.h:75
char m_aClan[MAX_CLAN_LENGTH]
Definition serverbrowser.h:70
bool m_Afk
Definition serverbrowser.h:74
Definition serverbrowser.h:25
bool m_RequiresLogin
Definition serverbrowser.h:124
int m_Location
Definition serverbrowser.h:111
int m_QuickSearchHit
Definition serverbrowser.h:96
int m_MapSize
Definition serverbrowser.h:119
char m_aMap[MAX_MAP_LENGTH]
Definition serverbrowser.h:117
uint64_t m_ReceivedPackets
Definition serverbrowser.h:90
bool m_LatencyIsEstimated
Definition serverbrowser.h:112
@ LOC_AUSTRALIA
Definition serverbrowser.h:32
@ LOC_EUROPE
Definition serverbrowser.h:33
@ LOC_NORTH_AMERICA
Definition serverbrowser.h:34
@ LOC_SOUTH_AMERICA
Definition serverbrowser.h:35
@ LOC_UNKNOWN
Definition serverbrowser.h:29
@ LOC_AFRICA
Definition serverbrowser.h:30
@ LOC_ASIA
Definition serverbrowser.h:31
@ LOC_CHINA
Definition serverbrowser.h:40
@ NUM_LOCS
Definition serverbrowser.h:41
int m_MaxClients
Definition serverbrowser.h:100
char m_aAddress[MAX_SERVER_ADDRESSES *NETADDR_MAXSTRSIZE]
Definition serverbrowser.h:121
int m_NumAddresses
Definition serverbrowser.h:93
EClientScoreKind m_ClientScoreKind
Definition serverbrowser.h:105
char m_aCommunityId[MAX_COMMUNITY_ID_LENGTH]
Definition serverbrowser.h:108
@ MAX_COMMUNITY_ID_LENGTH
Definition serverbrowser.h:61
@ MAX_COMMUNITY_TYPE_LENGTH
Definition serverbrowser.h:63
@ MAX_COMMUNITY_COUNTRY_LENGTH
Definition serverbrowser.h:62
int m_NumPlayers
Definition serverbrowser.h:103
NETADDR m_aAddresses[MAX_SERVER_ADDRESSES]
Definition serverbrowser.h:94
ERankState m_HasRank
Definition serverbrowser.h:114
static int EstimateLatency(int Loc1, int Loc2)
Definition serverbrowser.cpp:2365
int m_Flags
Definition serverbrowser.h:104
int m_ServerIndex
Definition serverbrowser.h:87
char m_aGameType[16]
Definition serverbrowser.h:115
char m_aCommunityCountry[MAX_COMMUNITY_COUNTRY_LENGTH]
Definition serverbrowser.h:109
CClient m_aClients[SERVERINFO_MAX_CLIENTS]
Definition serverbrowser.h:122
char m_aName[64]
Definition serverbrowser.h:116
char m_aVersion[32]
Definition serverbrowser.h:120
int m_NumFilteredPlayers
Definition serverbrowser.h:123
int m_NumReceivedClients
Definition serverbrowser.h:91
int m_MapCrc
Definition serverbrowser.h:118
int m_FriendState
Definition serverbrowser.h:97
static bool ParseLocation(int *pResult, const char *pString)
Definition serverbrowser.cpp:2378
int m_Latency
Definition serverbrowser.h:113
int m_MaxPlayers
Definition serverbrowser.h:102
EClientScoreKind
Definition serverbrowser.h:45
@ CLIENT_SCORE_KIND_UNSPECIFIED
Definition serverbrowser.h:46
@ CLIENT_SCORE_KIND_TIME
Definition serverbrowser.h:48
@ CLIENT_SCORE_KIND_POINTS
Definition serverbrowser.h:47
@ CLIENT_SCORE_KIND_TIME_BACKCOMPAT
Definition serverbrowser.h:49
char m_aCommunityType[MAX_COMMUNITY_TYPE_LENGTH]
Definition serverbrowser.h:110
int m_NumClients
Definition serverbrowser.h:101
ERankState
Definition serverbrowser.h:53
@ RANK_UNAVAILABLE
Definition serverbrowser.h:54
@ RANK_UNRANKED
Definition serverbrowser.h:56
@ RANK_RANKED
Definition serverbrowser.h:55
TRISTATE m_Favorite
Definition serverbrowser.h:106
int m_Type
Definition serverbrowser.h:89
TRISTATE m_FavoriteAllowPing
Definition serverbrowser.h:107
int m_FriendNum
Definition serverbrowser.h:98
Definition ui.h:150
Definition serverbrowser.h:255
virtual const std::vector< const CCommunity * > & SelectedCommunities() const =0
virtual const std::vector< const CCommunityCountry * > & SelectableCountries() const =0
virtual void Update(bool Force)=0
virtual const char * CountryTypeFilterKey() const =0
virtual bool CountriesTypesFilterAvailable() const =0
virtual bool AnyRanksAvailable() const =0
virtual const std::vector< const CCommunityType * > & SelectableTypes() const =0
Definition serverbrowser.h:245
virtual bool Empty() const =0
virtual void Remove(const char *pElement)=0
virtual void Clear()=0
virtual void Add(const char *pElement)=0
virtual bool Filtered(const char *pElement) const =0
Definition kernel.h:10
Definition serverbrowser.h:306
CServerEntry * m_pPrevReq
Definition serverbrowser.h:313
int m_GotInfo
Definition serverbrowser.h:310
int64_t m_RequestTime
Definition serverbrowser.h:308
CServerEntry * m_pNextReq
Definition serverbrowser.h:314
CServerInfo m_Info
Definition serverbrowser.h:311
bool m_RequestIgnoreInfo
Definition serverbrowser.h:309
Definition serverbrowser.h:267
virtual bool IsGettingServerlist() const =0
virtual int Max(const CServerInfo &Item) const =0
virtual void CleanFilters()=0
virtual SHA256_DIGEST DDNetInfoSha256() const =0
virtual std::vector< const CCommunity * > SelectedCommunities() const =0
@ TYPE_INTERNET
Definition serverbrowser.h:291
@ SORT_NUMFRIENDS
Definition serverbrowser.h:285
@ SORT_GAMETYPE
Definition serverbrowser.h:283
@ TYPE_LAN
Definition serverbrowser.h:292
@ SORT_MAP
Definition serverbrowser.h:282
@ QUICK_MAPNAME
Definition serverbrowser.h:289
@ TYPE_FAVORITES
Definition serverbrowser.h:293
@ QUICK_SERVERNAME
Definition serverbrowser.h:287
@ TYPE_FAVORITE_COMMUNITY_2
Definition serverbrowser.h:295
@ SORT_NAME
Definition serverbrowser.h:280
@ TYPE_FAVORITE_COMMUNITY_5
Definition serverbrowser.h:298
@ TYPE_FAVORITE_COMMUNITY_1
Definition serverbrowser.h:294
@ TYPE_FAVORITE_COMMUNITY_3
Definition serverbrowser.h:296
@ SORT_NUMPLAYERS
Definition serverbrowser.h:284
@ NUM_TYPES
Definition serverbrowser.h:299
@ QUICK_PLAYER
Definition serverbrowser.h:288
@ LAN_PORT_END
Definition serverbrowser.h:302
@ TYPE_FAVORITE_COMMUNITY_4
Definition serverbrowser.h:297
@ LAN_PORT_BEGIN
Definition serverbrowser.h:301
@ SORT_PING
Definition serverbrowser.h:281
virtual bool IsRefreshing() const =0
virtual std::vector< const CCommunity * > FavoriteCommunities() const =0
virtual const CCommunity * Community(const char *pCommunityId) const =0
virtual void Refresh(int Type, bool Force=false)=0
virtual bool IsServerlistError() const =0
static constexpr const char * COMMUNITY_TYPE_NONE
Definition serverbrowser.h:321
virtual unsigned CurrentCommunitiesHash() const =0
virtual int NumSortedServers() const =0
virtual ICommunityCache & CommunityCache()=0
static constexpr const char * COMMUNITY_ALL
Definition serverbrowser.h:326
virtual IFilterList & CountriesFilter()=0
static constexpr const char * COMMUNITY_DDNET
Definition serverbrowser.h:317
virtual IFilterList & CommunitiesFilter()=0
virtual int Players(const CServerInfo &Item) const =0
virtual const IFilterList & CommunitiesFilter() const =0
virtual int NumSortedPlayers() const =0
virtual const CServerInfo * SortedGet(int Index) const =0
virtual IFilterList & TypesFilter()=0
virtual const IFilterList & FavoriteCommunitiesFilter() const =0
static constexpr const char * COMMUNITY_COUNTRY_NONE
Definition serverbrowser.h:320
virtual const ICommunityCache & CommunityCache() const =0
virtual int GetCurrentType()=0
virtual std::vector< const CCommunity * > CurrentCommunities() const =0
virtual CServerEntry * Find(const NETADDR &Addr)=0
virtual bool DDNetInfoAvailable() const =0
virtual const char * GetTutorialServer()=0
virtual int NumServers() const =0
virtual int LoadingProgression() const =0
static constexpr const char * SEARCH_EXCLUDE_TOKEN
Definition serverbrowser.h:328
virtual const IFilterList & TypesFilter() const =0
virtual const std::vector< CCommunity > & Communities() const =0
virtual const IFilterList & CountriesFilter() const =0
static constexpr const char * COMMUNITY_NONE
Definition serverbrowser.h:318
virtual IFilterList & FavoriteCommunitiesFilter()=0
Definition vmath.h:15
@ MAX_MAP_LENGTH
Definition map.h:12
@ MAX_SERVER_ADDRESSES
Definition protocol.h:86
@ MAX_CLAN_LENGTH
Definition protocol.h:99
@ SERVERINFO_MAX_CLIENTS
Definition protocol.h:87
@ MAX_SKIN_LENGTH
Definition protocol.h:100
@ MAX_NAME_LENGTH
Definition protocol.h:98
int str_comp(const char *a, const char *b)
Definition system.cpp:3324
int str_copy(char *dst, const char *src, int dst_size)
Definition system.cpp:3039
#define MACRO_INTERFACE(Name)
Definition kernel.h:25
@ NUM_SKINPARTS
Definition protocol7.h:37
@ MAX_SKIN_LENGTH
Definition protocol7.h:69
static constexpr const char * DDNET_INFO_URL
Definition serverbrowser.h:20
static constexpr const char * DDNET_INFO_FILE
Definition serverbrowser.h:19
Definition serverbrowser.h:202
size_t operator()(const CCommunityMap &Map) const
Definition serverbrowser.h:203
Definition types.h:72
Definition hash.h:15
unsigned str_quickhash(const char *str)
Definition system.cpp:4438
TRISTATE
Definition types.h:15
constexpr auto NETADDR_MAXSTRSIZE
Definition types.h:51