//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. ======= // // Purpose: interface to steam managing game server/client match making // //============================================================================= #ifndef ISERVERSINFO_H #define ISERVERSINFO_H #ifdef _WIN32 #pragma once #endif #define MAX_GAME_DESCRIPTION 8192 #define MAX_SERVER_NAME 2048 enum NServerResponse { nServerResponded = 0, nServerFailedToRespond, nNoServersListedOnMasterServer, }; class newgameserver_t { public: newgameserver_t() = default; netadr_t m_NetAdr; ///< IP/Query Port/Connection Port for this server int m_nPing; ///< current ping time in milliseconds int m_nProtocolVersion; bool m_bHadSuccessfulResponse; ///< server has responded successfully in the past bool m_bDoNotRefresh; ///< server is marked as not responding and should no longer be refreshed char m_szGameDir[MAX_PATH]; ///< current game directory char m_szMap[MAX_PATH]; ///< current map char m_szGameTags[MAX_PATH]; char m_szGameDescription[MAX_GAME_DESCRIPTION]; ///< game description int m_nPlayers; 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 int m_iFlags; /// Game server name char m_szServerName[MAX_SERVER_NAME]; }; class IServerListResponse { public: // Server has responded ok with updated data virtual void ServerResponded( newgameserver_t &server ) = 0; virtual void RefreshComplete( NServerResponse response ) = 0; }; //----------------------------------------------------------------------------- // Purpose: Callback interface for receiving responses after pinging an individual server // class IServerPingResponse { public: // Server has responded successfully and has updated data virtual void ServerResponded( newgameserver_t &server ) = 0; }; //----------------------------------------------------------------------------- // Purpose: Callback interface for receiving responses after requesting details on // who is playing on a particular server. // class IServerPlayersResponse { public: // Got data on a new player on the server -- you'll get this callback once per player // on the server which you have requested player data on. virtual void AddPlayerToList( const char *pchName, int nScore, float flTimePlayed ) = 0; // The server failed to respond to the request for player details virtual void PlayersFailedToRespond() = 0; // The server has finished responding to the player details request virtual void PlayersRefreshComplete() = 0; }; //----------------------------------------------------------------------------- // Purpose: Functions for match making services for clients to get to game lists and details //----------------------------------------------------------------------------- class IServersInfo { public: virtual void RequestInternetServerList( const char *gamedir, IServerListResponse *response ) = 0; virtual void RequestLANServerList( const char *gamedir, IServerListResponse *response ) = 0; virtual void StopRefresh() = 0; //virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0; //virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0; }; #define SERVERLIST_INTERFACE_VERSION "ServerList001" extern IServersInfo *g_pServersInfo; #endif // ISERVERSINFO_H