ddnet/src/engine/client/serverbrowser.h

157 lines
3.9 KiB
C
Raw Normal View History

2010-11-20 10:37:14 +00:00
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
#ifndef ENGINE_CLIENT_SERVERBROWSER_H
#define ENGINE_CLIENT_SERVERBROWSER_H
2010-05-29 07:25:38 +00:00
#include <engine/serverbrowser.h>
class CServerBrowser : public IServerBrowser
{
public:
class CServerEntry
{
public:
NETADDR m_Addr;
int64 m_RequestTime;
2014-01-14 20:40:55 +00:00
bool m_Is64;
2010-05-29 07:25:38 +00:00
int m_GotInfo;
CServerInfo m_Info;
CServerEntry *m_pNextIp; // ip hashed list
CServerEntry *m_pPrevReq; // request list
CServerEntry *m_pNextReq;
};
2014-09-18 14:13:06 +00:00
class CDDNetCountry
{
public:
enum
{
MAX_SERVERS = 1024
};
char m_aName[256];
2014-09-19 21:52:09 +00:00
int m_FlagID;
2014-09-18 14:13:06 +00:00
NETADDR m_aServers[MAX_SERVERS];
int m_NumServers;
2014-09-19 21:52:09 +00:00
void Reset() { m_NumServers = 0; m_FlagID = -1; m_aName[0] = '\0'; };
2014-09-18 14:13:06 +00:00
void Add(NETADDR Addr) { if (m_NumServers < MAX_SERVERS) m_aServers[m_NumServers++] = Addr; };
};
2010-05-29 07:25:38 +00:00
enum
{
2014-09-13 14:36:25 +00:00
MAX_FAVORITES=2048,
2014-09-18 14:13:06 +00:00
MAX_DDNET_COUNTRIES=16,
2010-05-29 07:25:38 +00:00
};
CServerBrowser();
// interface functions
void Refresh(int Type);
bool IsRefreshing() const;
2010-05-29 07:25:38 +00:00
bool IsRefreshingMasters() const;
int LoadingProgression() const;
2010-05-29 07:25:38 +00:00
int NumServers() const { return m_NumServers; }
int NumSortedServers() const { return m_NumSortedServers; }
const CServerInfo *SortedGet(int Index) const;
bool IsFavorite(const NETADDR &Addr) const;
void AddFavorite(const NETADDR &Addr);
void RemoveFavorite(const NETADDR &Addr);
2014-09-13 14:36:25 +00:00
void LoadDDNet();
2014-09-19 21:52:09 +00:00
int NumDDNetCountries() { return m_NumDDNetCountries; };
int GetDDNetCountryFlag(int Index) { return m_aDDNetCountries[Index].m_FlagID; };
const char *GetDDNetCountryName(int Index) { return m_aDDNetCountries[Index].m_aName; };
void DDNetCountryFilterAdd(const char *pName);
void DDNetCountryFilterRem(const char *pName);
bool DDNetCountryFiltered(const char *pName);
void DDNetCountryFilterClean();
2010-05-29 07:25:38 +00:00
//
void Update(bool ForceResort);
2010-05-29 07:25:38 +00:00
void Set(const NETADDR &Addr, int Type, int Token, const CServerInfo *pInfo);
void Request(const NETADDR &Addr) const;
void SetBaseInfo(class CNetClient *pClient, const char *pNetVersion);
2014-01-14 20:40:55 +00:00
void RequestImpl64(const NETADDR &Addr, CServerEntry *pEntry) const;
void QueueRequest(CServerEntry *pEntry);
2014-01-08 05:15:56 +00:00
CServerEntry *Find(const NETADDR &Addr);
2010-05-29 07:25:38 +00:00
private:
CNetClient *m_pNetClient;
IMasterServer *m_pMasterServer;
class IConsole *m_pConsole;
2011-03-23 12:06:35 +00:00
class IFriends *m_pFriends;
2010-05-29 07:25:38 +00:00
char m_aNetVersion[128];
CHeap m_ServerlistHeap;
CServerEntry **m_ppServerlist;
int *m_pSortedServerlist;
NETADDR m_aFavoriteServers[MAX_FAVORITES];
int m_NumFavoriteServers;
2014-09-18 14:13:06 +00:00
CDDNetCountry m_aDDNetCountries[MAX_DDNET_COUNTRIES];
int m_NumDDNetCountries;
2014-09-13 14:36:25 +00:00
2010-05-29 07:25:38 +00:00
CServerEntry *m_aServerlistIp[256]; // ip hash list
CServerEntry *m_pFirstReqServer; // request list
CServerEntry *m_pLastReqServer;
int m_NumRequests;
int m_MasterServerCount;
//used instead of g_Config.br_max_requests to get more servers
int m_CurrentMaxRequests;
int m_LastPacketTick;
2010-05-29 07:25:38 +00:00
int m_NeedRefresh;
int m_NumSortedServers;
int m_NumSortedServersCapacity;
int m_NumServers;
int m_NumServerCapacity;
int m_Sorthash;
char m_aFilterString[64];
char m_aFilterGametypeString[128];
2010-05-29 07:25:38 +00:00
// the token is to keep server refresh separated from each other
int m_CurrentToken;
int m_ServerlistType;
int64 m_BroadcastTime;
// sorting criterions
bool SortCompareName(int Index1, int Index2) const;
bool SortCompareMap(int Index1, int Index2) const;
bool SortComparePing(int Index1, int Index2) const;
bool SortCompareGametype(int Index1, int Index2) const;
bool SortCompareNumPlayers(int Index1, int Index2) const;
bool SortCompareNumClients(int Index1, int Index2) const;
2010-05-29 07:25:38 +00:00
//
void Filter();
void Sort();
int SortHash() const;
CServerEntry *Add(const NETADDR &Addr);
2010-05-29 07:25:38 +00:00
void RemoveRequest(CServerEntry *pEntry);
void RequestImpl(const NETADDR &Addr, CServerEntry *pEntry) const;
void SetInfo(CServerEntry *pEntry, const CServerInfo &Info);
static void ConfigSaveCallback(IConfig *pConfig, void *pUserData);
};
#endif