mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-14 03:58:18 +00:00
112 lines
2.5 KiB
C
112 lines
2.5 KiB
C
|
#ifndef ENGINE_CLIENT_SRVBROWSE_H
|
||
|
#define ENGINE_CLIENT_SRVBROWSE_H
|
||
|
|
||
|
#include <engine/serverbrowser.h>
|
||
|
|
||
|
class CServerBrowser : public IServerBrowser
|
||
|
{
|
||
|
public:
|
||
|
class CServerEntry
|
||
|
{
|
||
|
public:
|
||
|
NETADDR m_Addr;
|
||
|
int64 m_RequestTime;
|
||
|
int m_GotInfo;
|
||
|
CServerInfo m_Info;
|
||
|
|
||
|
CServerEntry *m_pNextIp; // ip hashed list
|
||
|
|
||
|
CServerEntry *m_pPrevReq; // request list
|
||
|
CServerEntry *m_pNextReq;
|
||
|
};
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
MAX_FAVORITES=256
|
||
|
};
|
||
|
|
||
|
CServerBrowser();
|
||
|
|
||
|
// interface functions
|
||
|
void Refresh(int Type);
|
||
|
bool IsRefreshingMasters() const;
|
||
|
|
||
|
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);
|
||
|
|
||
|
//
|
||
|
void Update();
|
||
|
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);
|
||
|
|
||
|
private:
|
||
|
CNetClient *m_pNetClient;
|
||
|
IMasterServer *m_pMasterServer;
|
||
|
char m_aNetVersion[128];
|
||
|
|
||
|
CHeap m_ServerlistHeap;
|
||
|
CServerEntry **m_ppServerlist;
|
||
|
int *m_pSortedServerlist;
|
||
|
|
||
|
NETADDR m_aFavoriteServers[MAX_FAVORITES];
|
||
|
int m_NumFavoriteServers;
|
||
|
|
||
|
CServerEntry *m_aServerlistIp[256]; // ip hash list
|
||
|
|
||
|
CServerEntry *m_pFirstReqServer; // request list
|
||
|
CServerEntry *m_pLastReqServer;
|
||
|
int m_NumRequests;
|
||
|
|
||
|
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];
|
||
|
|
||
|
// 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 SortCompareProgression(int Index1, int Index2) const;
|
||
|
bool SortCompareNumPlayers(int Index1, int Index2) const;
|
||
|
|
||
|
//
|
||
|
void Filter();
|
||
|
void Sort();
|
||
|
int SortHash() const;
|
||
|
|
||
|
CServerEntry *Find(const NETADDR &Addr);
|
||
|
CServerEntry *Add(const NETADDR &Addr);
|
||
|
|
||
|
void RemoveRequest(CServerEntry *pEntry);
|
||
|
void QueueRequest(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
|