2017-01-20 08:36:52 -05:00
|
|
|
#pragma once
|
|
|
|
|
2017-02-14 14:43:03 -05:00
|
|
|
// This enables version filtering
|
2017-02-15 04:15:35 -05:00
|
|
|
#define VERSION_FILTER
|
2017-02-14 14:43:03 -05:00
|
|
|
|
2017-01-16 11:42:50 -05:00
|
|
|
namespace Components
|
|
|
|
{
|
|
|
|
class ServerList : public Component
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
typedef int(SortCallback)(const void*, const void*);
|
|
|
|
|
|
|
|
class ServerInfo
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
Network::Address addr;
|
|
|
|
std::string hostname;
|
|
|
|
std::string mapname;
|
|
|
|
std::string gametype;
|
|
|
|
std::string mod;
|
|
|
|
std::string shortversion;
|
|
|
|
int clients;
|
2017-06-12 15:01:56 -04:00
|
|
|
int bots;
|
2017-01-16 11:42:50 -05:00
|
|
|
int maxClients;
|
|
|
|
bool password;
|
|
|
|
int ping;
|
|
|
|
int matchType;
|
|
|
|
int securityLevel;
|
|
|
|
bool hardcore;
|
|
|
|
bool svRunning;
|
|
|
|
};
|
|
|
|
|
|
|
|
ServerList();
|
|
|
|
~ServerList();
|
|
|
|
|
|
|
|
static void Refresh(UIScript::Token);
|
|
|
|
static void RefreshVisibleList(UIScript::Token);
|
|
|
|
static void UpdateVisibleList(UIScript::Token);
|
2017-02-28 13:58:03 -05:00
|
|
|
static void InsertRequest(Network::Address address);
|
2017-01-16 11:42:50 -05:00
|
|
|
static void Insert(Network::Address address, Utils::InfoString info);
|
|
|
|
|
|
|
|
static ServerInfo* GetCurrentServer();
|
|
|
|
|
|
|
|
static bool IsFavouriteList();
|
|
|
|
static bool IsOfflineList();
|
|
|
|
static bool IsOnlineList();
|
|
|
|
|
2017-02-25 09:32:15 -05:00
|
|
|
static void Frame();
|
|
|
|
static std::vector<ServerInfo>* GetList();
|
|
|
|
|
2017-02-26 09:27:02 -05:00
|
|
|
static void UpdateVisibleInfo();
|
|
|
|
|
2017-01-16 11:42:50 -05:00
|
|
|
private:
|
|
|
|
enum Column
|
|
|
|
{
|
|
|
|
Password,
|
|
|
|
Matchtype,
|
|
|
|
Hostname,
|
|
|
|
Mapname,
|
|
|
|
Players,
|
|
|
|
Gametype,
|
|
|
|
Mod,
|
|
|
|
Ping,
|
|
|
|
};
|
|
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
union MasterEntry
|
|
|
|
{
|
|
|
|
char token[7];
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
uint32_t ip;
|
|
|
|
uint16_t port;
|
|
|
|
};
|
|
|
|
|
|
|
|
bool IsEndToken()
|
|
|
|
{
|
|
|
|
// End of transmission or file token
|
|
|
|
return (token[0] == 'E' && token[1] == 'O' && (token[2] == 'T' || token[2] == 'F'));
|
|
|
|
}
|
|
|
|
|
|
|
|
bool HasSeparator()
|
|
|
|
{
|
|
|
|
return (token[6] == '\\');
|
|
|
|
}
|
|
|
|
};
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
class Container
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
class ServerContainer
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
bool sent;
|
|
|
|
int sendTime;
|
|
|
|
std::string challenge;
|
|
|
|
Network::Address target;
|
|
|
|
};
|
|
|
|
|
|
|
|
bool awatingList;
|
|
|
|
int awaitTime;
|
|
|
|
|
|
|
|
int sentCount;
|
|
|
|
int sendCount;
|
|
|
|
|
|
|
|
Network::Address host;
|
|
|
|
std::vector<ServerContainer> servers;
|
2017-02-28 13:58:03 -05:00
|
|
|
std::recursive_mutex mutex;
|
2017-01-16 11:42:50 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
static unsigned int GetServerCount();
|
|
|
|
static const char* GetServerText(unsigned int index, int column);
|
2017-06-05 10:24:57 -04:00
|
|
|
static const char* GetServerInfoText(ServerInfo* server, int column, bool sorting = false);
|
2017-01-16 11:42:50 -05:00
|
|
|
static void SelectServer(unsigned int index);
|
|
|
|
|
|
|
|
static void UpdateSource();
|
|
|
|
static void UpdateGameType();
|
|
|
|
|
|
|
|
static void SortList();
|
|
|
|
|
|
|
|
static void LoadFavourties();
|
2018-12-17 08:29:18 -05:00
|
|
|
static void StoreFavourite(const std::string& server);
|
|
|
|
static void RemoveFavourite(const std::string& server);
|
2017-01-16 11:42:50 -05:00
|
|
|
|
|
|
|
static ServerInfo* GetServer(unsigned int index);
|
|
|
|
|
2018-12-17 08:29:18 -05:00
|
|
|
static bool CompareVersion(const std::string& version1, const std::string& version2);
|
2017-02-15 08:11:36 -05:00
|
|
|
|
2017-01-16 11:42:50 -05:00
|
|
|
static int SortKey;
|
|
|
|
static bool SortAsc;
|
|
|
|
|
|
|
|
static unsigned int CurrentServer;
|
|
|
|
static Container RefreshContainer;
|
|
|
|
|
|
|
|
static std::vector<ServerInfo> OnlineList;
|
|
|
|
static std::vector<ServerInfo> OfflineList;
|
|
|
|
static std::vector<ServerInfo> FavouriteList;
|
|
|
|
|
|
|
|
static std::vector<unsigned int> VisibleList;
|
|
|
|
};
|
|
|
|
}
|