//========= Copyright © 1996-2008, Valve LLC, All rights reserved. ============ // // Purpose: Class for handling finding servers, getting their details, and displaying // them inside the game // // $NoKeywords: $ //============================================================================= #ifndef SERVERBROWSER_H #define SERVERBROWSER_H #include "SpaceWar.h" #include "GameEngine.h" #include "BaseMenu.h" #include class CSpaceWarClient; class CServerBrowserMenu; // Class to encapsulate game server data class CGameServer { public: CGameServer( gameserveritem_t *pGameServerItem ); const char* GetName() { return m_szServerName; } const char* GetDisplayString() { return m_szServerString; } uint32 GetIP() { return m_unIPAddress; } int32 GetPort() { return m_nConnectionPort; } CSteamID GetSteamID() { return m_steamID; } private: uint32 m_unIPAddress; // IP address for the server int32 m_nConnectionPort; // Port for game clients to connect to for this server int m_nPing; // current ping time in milliseconds char m_szMap[32]; // current map char m_szGameDescription[64]; // game description int m_nPlayers; // current number of players on the server int m_nMaxPlayers; // Maximum players that can join this server int m_nBotPlayers; // Number of bots (i.e simulated players) on this server bool m_bPassword; // true if this server needs a password to join bool m_bSecure; // Is this server protected by VAC int m_nServerVersion; // server version as reported to Steam char m_szServerName[64]; // Game server name char m_szServerString[128]; // String to show in server browser CSteamID m_steamID; }; class CServerBrowser : public ISteamMatchmakingServerListResponse { public: CServerBrowser( IGameEngine *pGameEngine ); ~CServerBrowser(); // Initiate a refresh of internet servers void RefreshInternetServers(); // Initiate a refresh of LAN servers void RefreshLANServers(); // Run a frame (to handle kb input and such as well as render) void RunFrame(); // ISteamMatchmakingServerListResponse void ServerResponded( HServerListRequest hReq, int iServer ); void ServerFailedToRespond( HServerListRequest hReq, int iServer ); void RefreshComplete( HServerListRequest hReq, EMatchMakingServerResponse response ); private: // Pointer to engine instance (so we can draw stuff) IGameEngine *m_pGameEngine; // Track the number of servers we know about int m_nServers; // Track whether we are in the middle of a refresh or not bool m_bRequestingServers; // Track what server list request is currently running HServerListRequest m_hServerListRequest; // Menu object CServerBrowserMenu *m_pMenu; // List of game servers std::list< CGameServer > m_ListGameServers; }; #endif //SERVERBROWSER_H