All interface versions from sdk 1.0 and up are now supported.
							parent
							
								
									d076d12c6e
								
							
						
					
					
						commit
						d3e8a701dd
					
				| 
						 | 
					@ -24,6 +24,16 @@ Steam_Apps::Steam_Apps(Settings *settings, class SteamCallResults *callback_resu
 | 
				
			||||||
    this->callback_results = callback_results;
 | 
					    this->callback_results = callback_results;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// returns 0 if the key does not exist
 | 
				
			||||||
 | 
					// this may be true on first call, since the app data may not be cached locally yet
 | 
				
			||||||
 | 
					// If you expect it to exists wait for the AppDataChanged_t after the first failure and ask again
 | 
				
			||||||
 | 
					int Steam_Apps::GetAppData( AppId_t nAppID, const char *pchKey, char *pchValue, int cchValueMax )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    //TODO
 | 
				
			||||||
 | 
					    PRINT_DEBUG("GetAppData %u %s\n", nAppID, pchKey);
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool Steam_Apps::BIsSubscribed()
 | 
					bool Steam_Apps::BIsSubscribed()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PRINT_DEBUG("BIsSubscribed\n");
 | 
					    PRINT_DEBUG("BIsSubscribed\n");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
#include "base.h"
 | 
					#include "base.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Steam_Apps :
 | 
					class Steam_Apps :
 | 
				
			||||||
 | 
					public ISteamApps001,
 | 
				
			||||||
public ISteamApps002,
 | 
					public ISteamApps002,
 | 
				
			||||||
public ISteamApps003,
 | 
					public ISteamApps003,
 | 
				
			||||||
public ISteamApps004,
 | 
					public ISteamApps004,
 | 
				
			||||||
| 
						 | 
					@ -15,6 +16,11 @@ public ISteamApps
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    Steam_Apps(Settings *settings, class SteamCallResults *callback_results);
 | 
					    Steam_Apps(Settings *settings, class SteamCallResults *callback_results);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns 0 if the key does not exist
 | 
				
			||||||
 | 
						// this may be true on first call, since the app data may not be cached locally yet
 | 
				
			||||||
 | 
						// If you expect it to exists wait for the AppDataChanged_t after the first failure and ask again
 | 
				
			||||||
 | 
						int GetAppData( AppId_t nAppID, const char *pchKey, char *pchValue, int cchValueMax );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool BIsSubscribed();
 | 
						bool BIsSubscribed();
 | 
				
			||||||
	bool BIsLowViolence();
 | 
						bool BIsLowViolence();
 | 
				
			||||||
	bool BIsCybercafe();
 | 
						bool BIsCybercafe();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -295,7 +295,9 @@ ISteamGameServer *Steam_Client::GetISteamGameServer( HSteamUser hSteamUser, HSte
 | 
				
			||||||
    PRINT_DEBUG("GetISteamGameServer %s\n", pchVersion);
 | 
					    PRINT_DEBUG("GetISteamGameServer %s\n", pchVersion);
 | 
				
			||||||
    if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
 | 
					    if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strcmp(pchVersion, "SteamGameServer005") == 0) {
 | 
					    if (strcmp(pchVersion, "SteamGameServer004") == 0) {
 | 
				
			||||||
 | 
					        return (ISteamGameServer *)(void *)(ISteamGameServer004 *)steam_gameserver;
 | 
				
			||||||
 | 
					    } else if (strcmp(pchVersion, "SteamGameServer005") == 0) {
 | 
				
			||||||
        return (ISteamGameServer *)(void *)(ISteamGameServer005 *)steam_gameserver;
 | 
					        return (ISteamGameServer *)(void *)(ISteamGameServer005 *)steam_gameserver;
 | 
				
			||||||
    } else if (strcmp(pchVersion, "SteamGameServer006") == 0) {
 | 
					    } else if (strcmp(pchVersion, "SteamGameServer006") == 0) {
 | 
				
			||||||
        return (ISteamGameServer *)(void *)(ISteamGameServer008 *)steam_gameserver;
 | 
					        return (ISteamGameServer *)(void *)(ISteamGameServer008 *)steam_gameserver;
 | 
				
			||||||
| 
						 | 
					@ -343,7 +345,9 @@ ISteamFriends *Steam_Client::GetISteamFriends( HSteamUser hSteamUser, HSteamPipe
 | 
				
			||||||
    PRINT_DEBUG("GetISteamFriends %s\n", pchVersion);
 | 
					    PRINT_DEBUG("GetISteamFriends %s\n", pchVersion);
 | 
				
			||||||
    if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
 | 
					    if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strcmp(pchVersion, "SteamFriends004") == 0) {
 | 
					    if (strcmp(pchVersion, "SteamFriends003") == 0) {
 | 
				
			||||||
 | 
					        return (ISteamFriends *)(void *)(ISteamFriends003 *)steam_friends;
 | 
				
			||||||
 | 
					    } else if (strcmp(pchVersion, "SteamFriends004") == 0) {
 | 
				
			||||||
        return (ISteamFriends *)(void *)(ISteamFriends004 *)steam_friends;
 | 
					        return (ISteamFriends *)(void *)(ISteamFriends004 *)steam_friends;
 | 
				
			||||||
    } else if (strcmp(pchVersion, "SteamFriends005") == 0) {
 | 
					    } else if (strcmp(pchVersion, "SteamFriends005") == 0) {
 | 
				
			||||||
        return (ISteamFriends *)(void *)(ISteamFriends005 *)steam_friends;
 | 
					        return (ISteamFriends *)(void *)(ISteamFriends005 *)steam_friends;
 | 
				
			||||||
| 
						 | 
					@ -425,19 +429,15 @@ ISteamMatchmaking *Steam_Client::GetISteamMatchmaking( HSteamUser hSteamUser, HS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strcmp(pchVersion, "SteamMatchMaking001") == 0) {
 | 
					    if (strcmp(pchVersion, "SteamMatchMaking001") == 0) {
 | 
				
			||||||
        //TODO
 | 
					        //TODO
 | 
				
			||||||
        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking006 *)steam_matchmaking;
 | 
					        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking002 *)steam_matchmaking;
 | 
				
			||||||
    } else if (strcmp(pchVersion, "SteamMatchMaking002") == 0) {
 | 
					    } else if (strcmp(pchVersion, "SteamMatchMaking002") == 0) {
 | 
				
			||||||
        //TODO
 | 
					        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking002 *)steam_matchmaking;
 | 
				
			||||||
        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking006 *)steam_matchmaking;
 | 
					 | 
				
			||||||
    } else if (strcmp(pchVersion, "SteamMatchMaking003") == 0) {
 | 
					    } else if (strcmp(pchVersion, "SteamMatchMaking003") == 0) {
 | 
				
			||||||
        //TODO
 | 
					        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking003 *)steam_matchmaking;
 | 
				
			||||||
        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking006 *)steam_matchmaking;
 | 
					 | 
				
			||||||
    } else if (strcmp(pchVersion, "SteamMatchMaking004") == 0) {
 | 
					    } else if (strcmp(pchVersion, "SteamMatchMaking004") == 0) {
 | 
				
			||||||
        //TODO
 | 
					        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking004 *)steam_matchmaking;
 | 
				
			||||||
        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking006 *)steam_matchmaking;
 | 
					 | 
				
			||||||
    } else if (strcmp(pchVersion, "SteamMatchMaking005") == 0) {
 | 
					    } else if (strcmp(pchVersion, "SteamMatchMaking005") == 0) {
 | 
				
			||||||
        //TODO
 | 
					        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking005 *)steam_matchmaking;
 | 
				
			||||||
        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking006 *)steam_matchmaking;
 | 
					 | 
				
			||||||
    } else if (strcmp(pchVersion, "SteamMatchMaking006") == 0) {
 | 
					    } else if (strcmp(pchVersion, "SteamMatchMaking006") == 0) {
 | 
				
			||||||
        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking006 *)steam_matchmaking;
 | 
					        return (ISteamMatchmaking *)(void *)(ISteamMatchmaking006 *)steam_matchmaking;
 | 
				
			||||||
    } else if (strcmp(pchVersion, "SteamMatchMaking007") == 0) {
 | 
					    } else if (strcmp(pchVersion, "SteamMatchMaking007") == 0) {
 | 
				
			||||||
| 
						 | 
					@ -459,6 +459,15 @@ ISteamMatchmakingServers *Steam_Client::GetISteamMatchmakingServers( HSteamUser
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PRINT_DEBUG("GetISteamMatchmakingServers %s\n", pchVersion);
 | 
					    PRINT_DEBUG("GetISteamMatchmakingServers %s\n", pchVersion);
 | 
				
			||||||
    if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
 | 
					    if (!steam_pipes.count(hSteamPipe) || !hSteamUser) return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (strcmp(pchVersion, "SteamMatchMakingServers001") == 0) {
 | 
				
			||||||
 | 
					        return (ISteamMatchmakingServers *)(void *)(ISteamMatchmakingServers001 *)steam_matchmaking_servers;
 | 
				
			||||||
 | 
					    } else if (strcmp(pchVersion, STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION) == 0) {
 | 
				
			||||||
 | 
					        return steam_matchmaking_servers;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        return steam_matchmaking_servers;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return steam_matchmaking_servers;
 | 
					    return steam_matchmaking_servers;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -676,7 +685,9 @@ ISteamApps *Steam_Client::GetISteamApps( HSteamUser hSteamUser, HSteamPipe hStea
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        steam_apps_temp = steam_apps;
 | 
					        steam_apps_temp = steam_apps;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION002") == 0) {
 | 
					    if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION001") == 0) {
 | 
				
			||||||
 | 
					        return (ISteamApps *)(void *)(ISteamApps001 *)steam_apps_temp;
 | 
				
			||||||
 | 
					    } else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION002") == 0) {
 | 
				
			||||||
        return (ISteamApps *)(void *)(ISteamApps002 *)steam_apps_temp;
 | 
					        return (ISteamApps *)(void *)(ISteamApps002 *)steam_apps_temp;
 | 
				
			||||||
    } else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION003") == 0) {
 | 
					    } else if (strcmp(pchVersion, "STEAMAPPS_INTERFACE_VERSION003") == 0) {
 | 
				
			||||||
        return (ISteamApps *)(void *)(ISteamApps003 *)steam_apps_temp;
 | 
					        return (ISteamApps *)(void *)(ISteamApps003 *)steam_apps_temp;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,7 @@ struct Avatar_Numbers {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Steam_Friends : 
 | 
					class Steam_Friends : 
 | 
				
			||||||
 | 
					public ISteamFriends003,
 | 
				
			||||||
public ISteamFriends004,
 | 
					public ISteamFriends004,
 | 
				
			||||||
public ISteamFriends005,
 | 
					public ISteamFriends005,
 | 
				
			||||||
public ISteamFriends006,
 | 
					public ISteamFriends006,
 | 
				
			||||||
| 
						 | 
					@ -629,6 +630,12 @@ int GetFriendAvatar( CSteamID steamIDFriend, int eAvatarSize )
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int GetFriendAvatar(CSteamID steamIDFriend)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("Steam_Friends::GetFriendAvatar old\n");
 | 
				
			||||||
 | 
					    return GetFriendAvatar(steamIDFriend, k_EAvatarSize32x32);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// requests information about a user - persona name & avatar
 | 
					// requests information about a user - persona name & avatar
 | 
				
			||||||
// if bRequireNameOnly is set, then the avatar of a user isn't downloaded 
 | 
					// if bRequireNameOnly is set, then the avatar of a user isn't downloaded 
 | 
				
			||||||
// - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
 | 
					// - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -285,7 +285,7 @@ void Steam_GameServer::ClearAllKeyValues()
 | 
				
			||||||
/// Call this to add/update a key/value pair.
 | 
					/// Call this to add/update a key/value pair.
 | 
				
			||||||
void Steam_GameServer::SetKeyValue( const char *pKey, const char *pValue )
 | 
					void Steam_GameServer::SetKeyValue( const char *pKey, const char *pValue )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PRINT_DEBUG("SetKeyValue\n");
 | 
					    PRINT_DEBUG("SetKeyValue %s %s\n", pKey, pValue);
 | 
				
			||||||
    std::lock_guard<std::recursive_mutex> lock(global_mutex);
 | 
					    std::lock_guard<std::recursive_mutex> lock(global_mutex);
 | 
				
			||||||
    (*server_data.mutable_values())[std::string(pKey)] = std::string(pValue);
 | 
					    (*server_data.mutable_values())[std::string(pKey)] = std::string(pValue);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -347,6 +347,10 @@ bool Steam_GameServer::SendUserConnectAndAuthenticate( uint32 unIPClient, const
 | 
				
			||||||
    return ticket_manager->SendUserConnectAndAuthenticate(unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser);
 | 
					    return ticket_manager->SendUserConnectAndAuthenticate(unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Steam_GameServer::SendUserConnectAndAuthenticate( CSteamID steamIDUser, uint32 unIPClient, void *pvAuthBlob, uint32 cubAuthBlobSize )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SendUserConnectAndAuthenticate(unIPClient, pvAuthBlob, cubAuthBlobSize, NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.  
 | 
					// Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.  
 | 
				
			||||||
// 
 | 
					// 
 | 
				
			||||||
| 
						 | 
					@ -380,7 +384,7 @@ void Steam_GameServer::SendUserDisconnect( CSteamID steamIDUser )
 | 
				
			||||||
// Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
 | 
					// Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
 | 
				
			||||||
bool Steam_GameServer::BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore )
 | 
					bool Steam_GameServer::BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PRINT_DEBUG("BUpdateUserData\n");
 | 
					    PRINT_DEBUG("BUpdateUserData %llu %s %u\n", steamIDUser.ConvertToUint64(), pchPlayerName, uScore);
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -420,6 +424,12 @@ bool Steam_GameServer::BSetServerType( uint32 unServerFlags, uint32 unGameIP, ui
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool Steam_GameServer::BSetServerType( int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, 
 | 
				
			||||||
 | 
														uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return BSetServerType(unServerFlags, unGameIP, unGamePort, unSpectatorPort, usQueryPort, pchGameDir, pchVersion, bLANMode);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Updates server status values which shows up in the server browser and matchmaking APIs
 | 
					// Updates server status values which shows up in the server browser and matchmaking APIs
 | 
				
			||||||
void Steam_GameServer::UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers, 
 | 
					void Steam_GameServer::UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers, 
 | 
				
			||||||
                                    const char *pchServerName, const char *pSpectatorServerName, 
 | 
					                                    const char *pchServerName, const char *pSpectatorServerName, 
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,6 +29,7 @@ struct Gameserver_Outgoing_Packet {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Steam_GameServer : 
 | 
					class Steam_GameServer : 
 | 
				
			||||||
 | 
					public ISteamGameServer004,
 | 
				
			||||||
public ISteamGameServer005,
 | 
					public ISteamGameServer005,
 | 
				
			||||||
public ISteamGameServer008,
 | 
					public ISteamGameServer008,
 | 
				
			||||||
public ISteamGameServer009,
 | 
					public ISteamGameServer009,
 | 
				
			||||||
| 
						 | 
					@ -189,6 +190,7 @@ public:
 | 
				
			||||||
	// If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
 | 
						// If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
 | 
				
			||||||
	// for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
 | 
						// for the user has succeeded or failed (the steamid in the callback will match the one returned by this call)
 | 
				
			||||||
	bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser );
 | 
						bool SendUserConnectAndAuthenticate( uint32 unIPClient, const void *pvAuthBlob, uint32 cubAuthBlobSize, CSteamID *pSteamIDUser );
 | 
				
			||||||
 | 
						void SendUserConnectAndAuthenticate( CSteamID steamIDUser, uint32 unIPClient, void *pvAuthBlob, uint32 cubAuthBlobSize );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.  
 | 
						// Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.  
 | 
				
			||||||
	// 
 | 
						// 
 | 
				
			||||||
| 
						 | 
					@ -227,6 +229,9 @@ public:
 | 
				
			||||||
	bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, 
 | 
						bool BSetServerType( uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, 
 | 
				
			||||||
								uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode );
 | 
													uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						bool BSetServerType( int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, 
 | 
				
			||||||
 | 
														uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Updates server status values which shows up in the server browser and matchmaking APIs
 | 
						// Updates server status values which shows up in the server browser and matchmaking APIs
 | 
				
			||||||
	void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers, 
 | 
						void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers, 
 | 
				
			||||||
									 const char *pchServerName, const char *pSpectatorServerName, 
 | 
														 const char *pchServerName, const char *pSpectatorServerName, 
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,6 +60,10 @@ struct Chat_Entry {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Steam_Matchmaking :
 | 
					class Steam_Matchmaking :
 | 
				
			||||||
 | 
					public ISteamMatchmaking002,
 | 
				
			||||||
 | 
					public ISteamMatchmaking003,
 | 
				
			||||||
 | 
					public ISteamMatchmaking004,
 | 
				
			||||||
 | 
					public ISteamMatchmaking005,
 | 
				
			||||||
public ISteamMatchmaking006,
 | 
					public ISteamMatchmaking006,
 | 
				
			||||||
public ISteamMatchmaking007,
 | 
					public ISteamMatchmaking007,
 | 
				
			||||||
public ISteamMatchmaking008,
 | 
					public ISteamMatchmaking008,
 | 
				
			||||||
| 
						 | 
					@ -422,6 +426,11 @@ SteamAPICall_t RequestLobbyList()
 | 
				
			||||||
    return search_call_api_id;
 | 
					    return search_call_api_id;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void RequestLobbyList_OLD()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    RequestLobbyList();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// filters for lobbies
 | 
					// filters for lobbies
 | 
				
			||||||
// this needs to be called before RequestLobbyList() to take effect
 | 
					// this needs to be called before RequestLobbyList() to take effect
 | 
				
			||||||
// these are cleared on each call to RequestLobbyList()
 | 
					// these are cleared on each call to RequestLobbyList()
 | 
				
			||||||
| 
						 | 
					@ -509,6 +518,11 @@ void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueTo
 | 
				
			||||||
	AddRequestLobbyListNumericalFilter(pchKeyToMatch, nValueToMatch, (ELobbyComparison) nComparisonType );
 | 
						AddRequestLobbyListNumericalFilter(pchKeyToMatch, nValueToMatch, (ELobbyComparison) nComparisonType );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void AddRequestLobbyListSlotsAvailableFilter()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
 | 
					// returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
 | 
				
			||||||
// should only be called after a LobbyMatchList_t callback is received
 | 
					// should only be called after a LobbyMatchList_t callback is received
 | 
				
			||||||
// iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
 | 
					// iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
 | 
				
			||||||
| 
						 | 
					@ -623,6 +637,16 @@ SteamAPICall_t CreateLobby( ELobbyType eLobbyType )
 | 
				
			||||||
	return CreateLobby(eLobbyType, 0);
 | 
						return CreateLobby(eLobbyType, 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CreateLobby_OLD( ELobbyType eLobbyType )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    CreateLobby(eLobbyType);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CreateLobby( bool bPrivate )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    CreateLobby(bPrivate ? k_ELobbyTypePrivate : k_ELobbyTypePublic);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Joins an existing lobby
 | 
					// Joins an existing lobby
 | 
				
			||||||
// this is an asynchronous request
 | 
					// this is an asynchronous request
 | 
				
			||||||
// results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
 | 
					// results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
 | 
				
			||||||
| 
						 | 
					@ -649,6 +673,11 @@ SteamAPICall_t JoinLobby( CSteamID steamIDLobby )
 | 
				
			||||||
    return pending_join.api_id;
 | 
					    return pending_join.api_id;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void JoinLobby_OLD( CSteamID steamIDLobby )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    JoinLobby(steamIDLobby);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Leave a lobby; this will take effect immediately on the client side
 | 
					// Leave a lobby; this will take effect immediately on the client side
 | 
				
			||||||
// other users in the lobby will be notified by a LobbyChatUpdate_t callback
 | 
					// other users in the lobby will be notified by a LobbyChatUpdate_t callback
 | 
				
			||||||
void LeaveLobby( CSteamID steamIDLobby )
 | 
					void LeaveLobby( CSteamID steamIDLobby )
 | 
				
			||||||
| 
						 | 
					@ -1071,6 +1100,10 @@ int GetLobbyMemberLimit( CSteamID steamIDLobby )
 | 
				
			||||||
    return limit;
 | 
					    return limit;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SetLobbyVoiceEnabled( CSteamID steamIDLobby, bool bVoiceEnabled )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("SetLobbyVoiceEnabled\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// updates which type of lobby it is
 | 
					// updates which type of lobby it is
 | 
				
			||||||
// only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
 | 
					// only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls
 | 
				
			||||||
| 
						 | 
					@ -1131,6 +1164,23 @@ CSteamID GetLobbyOwner( CSteamID steamIDLobby )
 | 
				
			||||||
    return (uint64)lobby->owner();
 | 
					    return (uint64)lobby->owner();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// asks the Steam servers for a list of lobbies that friends are in
 | 
				
			||||||
 | 
					// returns results by posting one RequestFriendsLobbiesResponse_t callback per friend/lobby pair
 | 
				
			||||||
 | 
					// if no friends are in lobbies, RequestFriendsLobbiesResponse_t will be posted but with 0 results
 | 
				
			||||||
 | 
					// filters don't apply to lobbies (currently)
 | 
				
			||||||
 | 
					bool RequestFriendsLobbies()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("RequestFriendsLobbies\n");
 | 
				
			||||||
 | 
					    RequestFriendsLobbiesResponse_t data = {};
 | 
				
			||||||
 | 
					    callbacks->addCBResult(data.k_iCallback, &data, sizeof(data));
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float GetLobbyDistance( CSteamID steamIDLobby )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("GetLobbyDistance %llu\n", steamIDLobby.ConvertToUint64());
 | 
				
			||||||
 | 
					    return 0.0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// changes who the lobby owner is
 | 
					// changes who the lobby owner is
 | 
				
			||||||
// you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
 | 
					// you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,6 +52,7 @@ HServerListRequest Steam_Matchmaking_Servers::RequestLANServerList( AppId_t iApp
 | 
				
			||||||
    struct Steam_Matchmaking_Request request;
 | 
					    struct Steam_Matchmaking_Request request;
 | 
				
			||||||
    request.appid = iApp;
 | 
					    request.appid = iApp;
 | 
				
			||||||
    request.callbacks = pRequestServersResponse;
 | 
					    request.callbacks = pRequestServersResponse;
 | 
				
			||||||
 | 
					    request.old_callbacks = NULL;
 | 
				
			||||||
    request.cancelled = false;
 | 
					    request.cancelled = false;
 | 
				
			||||||
    request.completed = false;
 | 
					    request.completed = false;
 | 
				
			||||||
    requests.push_back(request);
 | 
					    requests.push_back(request);
 | 
				
			||||||
| 
						 | 
					@ -90,6 +91,71 @@ HServerListRequest Steam_Matchmaking_Servers::RequestSpectatorServerList( AppId_
 | 
				
			||||||
    return RequestLANServerList(iApp, pRequestServersResponse);
 | 
					    return RequestLANServerList(iApp, pRequestServersResponse);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Steam_Matchmaking_Servers::RequestOldServerList(AppId_t iApp, ISteamMatchmakingServerListResponse001 *pRequestServersResponse, EMatchMakingType type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("RequestOldServerList %u\n", iApp);
 | 
				
			||||||
 | 
					    std::lock_guard<std::recursive_mutex> lock(global_mutex);
 | 
				
			||||||
 | 
					    auto g = std::begin(requests);
 | 
				
			||||||
 | 
					    while (g != std::end(requests)) {
 | 
				
			||||||
 | 
					        if (g->id == ((void *)type)) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ++g;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct Steam_Matchmaking_Request request;
 | 
				
			||||||
 | 
					    request.appid = iApp;
 | 
				
			||||||
 | 
					    request.callbacks = NULL;
 | 
				
			||||||
 | 
					    request.old_callbacks = pRequestServersResponse;
 | 
				
			||||||
 | 
					    request.cancelled = false;
 | 
				
			||||||
 | 
					    request.completed = false;
 | 
				
			||||||
 | 
					    requests.push_back(request);
 | 
				
			||||||
 | 
					    requests[requests.size() - 1].id = (void *)type;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Steam_Matchmaking_Servers::RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("%s old\n", __FUNCTION__);
 | 
				
			||||||
 | 
					    //TODO
 | 
				
			||||||
 | 
					    RequestOldServerList(iApp, pRequestServersResponse, eInternetServer);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Steam_Matchmaking_Servers::RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse001 *pRequestServersResponse )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("%s old\n", __FUNCTION__);
 | 
				
			||||||
 | 
					    //TODO
 | 
				
			||||||
 | 
					    RequestOldServerList(iApp, pRequestServersResponse, eLANServer);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Steam_Matchmaking_Servers::RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("%s old\n", __FUNCTION__);
 | 
				
			||||||
 | 
					    //TODO
 | 
				
			||||||
 | 
					    RequestOldServerList(iApp, pRequestServersResponse, eFriendsServer);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Steam_Matchmaking_Servers::RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("%s old\n", __FUNCTION__);
 | 
				
			||||||
 | 
					    //TODO
 | 
				
			||||||
 | 
					    RequestOldServerList(iApp, pRequestServersResponse, eFavoritesServer);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Steam_Matchmaking_Servers::RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("%s old\n", __FUNCTION__);
 | 
				
			||||||
 | 
					    //TODO
 | 
				
			||||||
 | 
					    RequestOldServerList(iApp, pRequestServersResponse, eHistoryServer);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Steam_Matchmaking_Servers::RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    PRINT_DEBUG("%s old\n", __FUNCTION__);
 | 
				
			||||||
 | 
					    //TODO
 | 
				
			||||||
 | 
					    RequestOldServerList(iApp, pRequestServersResponse, eSpectatorServer);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
 | 
					// Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
 | 
				
			||||||
// RefreshComplete callback is not posted when request is released.
 | 
					// RefreshComplete callback is not posted when request is released.
 | 
				
			||||||
| 
						 | 
					@ -410,6 +476,7 @@ void Steam_Matchmaking_Servers::RunCallbacks()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        r.gameservers_filtered.clear();
 | 
					        r.gameservers_filtered.clear();
 | 
				
			||||||
        for (auto &g : gameservers) {
 | 
					        for (auto &g : gameservers) {
 | 
				
			||||||
 | 
					            PRINT_DEBUG("game_server_check %u %u\n", g.server.appid(), r.appid);
 | 
				
			||||||
            if (g.server.appid() == r.appid) {
 | 
					            if (g.server.appid() == r.appid) {
 | 
				
			||||||
                PRINT_DEBUG("REQUESTS server found\n");
 | 
					                PRINT_DEBUG("REQUESTS server found\n");
 | 
				
			||||||
                r.gameservers_filtered.push_back(g);
 | 
					                r.gameservers_filtered.push_back(g);
 | 
				
			||||||
| 
						 | 
					@ -440,6 +507,20 @@ void Steam_Matchmaking_Servers::RunCallbacks()
 | 
				
			||||||
                r.callbacks->RefreshComplete(r.id, eNoServersListedOnMasterServer);
 | 
					                r.callbacks->RefreshComplete(r.id, eNoServersListedOnMasterServer);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (r.old_callbacks) {
 | 
				
			||||||
 | 
					            for (auto &g : r.gameservers_filtered) {
 | 
				
			||||||
 | 
					                PRINT_DEBUG("old REQUESTS server responded cb %p\n", r.id);
 | 
				
			||||||
 | 
					                r.old_callbacks->ServerResponded(i);
 | 
				
			||||||
 | 
					                ++i;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (i) {
 | 
				
			||||||
 | 
					                r.old_callbacks->RefreshComplete(eServerResponded);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                r.old_callbacks->RefreshComplete(eNoServersListedOnMasterServer);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::vector <struct Steam_Matchmaking_Servers_Direct_IP_Request> direct_ip_requests_temp;
 | 
					    std::vector <struct Steam_Matchmaking_Servers_Direct_IP_Request> direct_ip_requests_temp;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,11 +40,13 @@ struct Steam_Matchmaking_Request {
 | 
				
			||||||
    AppId_t appid;
 | 
					    AppId_t appid;
 | 
				
			||||||
    HServerListRequest id;
 | 
					    HServerListRequest id;
 | 
				
			||||||
    ISteamMatchmakingServerListResponse *callbacks;
 | 
					    ISteamMatchmakingServerListResponse *callbacks;
 | 
				
			||||||
 | 
						ISteamMatchmakingServerListResponse001 *old_callbacks;
 | 
				
			||||||
    bool completed, cancelled, released;
 | 
					    bool completed, cancelled, released;
 | 
				
			||||||
    std::vector <struct Steam_Matchmaking_Servers_Gameserver> gameservers_filtered;
 | 
					    std::vector <struct Steam_Matchmaking_Servers_Gameserver> gameservers_filtered;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Steam_Matchmaking_Servers : public ISteamMatchmakingServers
 | 
					class Steam_Matchmaking_Servers : public ISteamMatchmakingServers,
 | 
				
			||||||
 | 
					public ISteamMatchmakingServers001
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    class Settings *settings;
 | 
					    class Settings *settings;
 | 
				
			||||||
    class Networking *network;
 | 
					    class Networking *network;
 | 
				
			||||||
| 
						 | 
					@ -52,6 +54,7 @@ class Steam_Matchmaking_Servers : public ISteamMatchmakingServers
 | 
				
			||||||
    std::vector <struct Steam_Matchmaking_Servers_Gameserver> gameservers;
 | 
					    std::vector <struct Steam_Matchmaking_Servers_Gameserver> gameservers;
 | 
				
			||||||
    std::vector <struct Steam_Matchmaking_Request> requests;
 | 
					    std::vector <struct Steam_Matchmaking_Request> requests;
 | 
				
			||||||
    std::vector <struct Steam_Matchmaking_Servers_Direct_IP_Request> direct_ip_requests;
 | 
					    std::vector <struct Steam_Matchmaking_Servers_Direct_IP_Request> direct_ip_requests;
 | 
				
			||||||
 | 
						void RequestOldServerList(AppId_t iApp, ISteamMatchmakingServerListResponse001 *pRequestServersResponse, EMatchMakingType type);
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    Steam_Matchmaking_Servers(class Settings *settings, class Networking *network);
 | 
					    Steam_Matchmaking_Servers(class Settings *settings, class Networking *network);
 | 
				
			||||||
	// Request a new list of servers of a particular type.  These calls each correspond to one of the EMatchMakingType values.
 | 
						// Request a new list of servers of a particular type.  These calls each correspond to one of the EMatchMakingType values.
 | 
				
			||||||
| 
						 | 
					@ -64,6 +67,13 @@ public:
 | 
				
			||||||
	HServerListRequest RequestHistoryServerList( AppId_t iApp, STEAM_ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse );
 | 
						HServerListRequest RequestHistoryServerList( AppId_t iApp, STEAM_ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse );
 | 
				
			||||||
	HServerListRequest RequestSpectatorServerList( AppId_t iApp, STEAM_ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse );
 | 
						HServerListRequest RequestSpectatorServerList( AppId_t iApp, STEAM_ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse );
 | 
				
			||||||
 | 
						void RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse001 *pRequestServersResponse );
 | 
				
			||||||
 | 
						void RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse );
 | 
				
			||||||
 | 
						void RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse );
 | 
				
			||||||
 | 
						void RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse );
 | 
				
			||||||
 | 
						void RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
 | 
						// Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress.
 | 
				
			||||||
	// RefreshComplete callback is not posted when request is released.
 | 
						// RefreshComplete callback is not posted when request is released.
 | 
				
			||||||
	void ReleaseRequest( HServerListRequest hServerListRequest );
 | 
						void ReleaseRequest( HServerListRequest hServerListRequest );
 | 
				
			||||||
| 
						 | 
					@ -167,6 +177,28 @@ public:
 | 
				
			||||||
	// Refresh a single server inside of a query (rather than all the servers )
 | 
						// Refresh a single server inside of a query (rather than all the servers )
 | 
				
			||||||
	void RefreshServer( HServerListRequest hRequest, int iServer ); 
 | 
						void RefreshServer( HServerListRequest hRequest, int iServer ); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get details on a given server in the list, you can get the valid range of index
 | 
				
			||||||
 | 
						// values by calling GetServerCount().  You will also receive index values in 
 | 
				
			||||||
 | 
						// ISteamMatchmakingServerListResponse::ServerResponded() callbacks
 | 
				
			||||||
 | 
						gameserveritem_t *GetServerDetails( EMatchMakingType eType, int iServer ) { return GetServerDetails((HServerListRequest) eType , iServer ); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Cancel an request which is operation on the given list type.  You should call this to cancel
 | 
				
			||||||
 | 
						// any in-progress requests before destructing a callback object that may have been passed 
 | 
				
			||||||
 | 
						// to one of the above list request calls.  Not doing so may result in a crash when a callback
 | 
				
			||||||
 | 
						// occurs on the destructed object.
 | 
				
			||||||
 | 
						void CancelQuery( EMatchMakingType eType ) { return CancelQuery((HServerListRequest) eType); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Ping every server in your list again but don't update the list of servers
 | 
				
			||||||
 | 
						void RefreshQuery( EMatchMakingType eType ) { return RefreshQuery((HServerListRequest) eType); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Returns true if the list is currently refreshing its server list
 | 
				
			||||||
 | 
						bool IsRefreshing( EMatchMakingType eType ) { return IsRefreshing((HServerListRequest) eType); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
 | 
				
			||||||
 | 
						int GetServerCount( EMatchMakingType eType ) { return GetServerCount((HServerListRequest) eType); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Refresh a single server inside of a query (rather than all the servers )
 | 
				
			||||||
 | 
						void RefreshServer( EMatchMakingType eType, int iServer ) { return RefreshServer((HServerListRequest) eType, iServer); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//-----------------------------------------------------------------------------
 | 
						//-----------------------------------------------------------------------------
 | 
				
			||||||
	// Queries to individual servers directly via IP/Port
 | 
						// Queries to individual servers directly via IP/Port
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,82 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ISTEAMFRIENDS003_H
 | 
				
			||||||
 | 
					#define ISTEAMFRIENDS003_H
 | 
				
			||||||
 | 
					#ifdef STEAM_WIN32
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ISteamFriends003
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						// returns the local players name - guaranteed to not be NULL.
 | 
				
			||||||
 | 
						// this is the same name as on the users community profile page
 | 
				
			||||||
 | 
						// this is stored in UTF-8 format
 | 
				
			||||||
 | 
						// like all the other interface functions that return a char *, it's important that this pointer is not saved
 | 
				
			||||||
 | 
						// off; it will eventually be free'd or re-allocated
 | 
				
			||||||
 | 
						virtual const char *GetPersonaName() = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// sets the player name, stores it on the server and publishes the changes to all friends who are online
 | 
				
			||||||
 | 
						virtual void SetPersonaName_old( const char *pchPersonaName ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// gets the status of the current user
 | 
				
			||||||
 | 
						virtual EPersonaState GetPersonaState() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// friend iteration
 | 
				
			||||||
 | 
						// takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria
 | 
				
			||||||
 | 
						// then GetFriendByIndex() can then be used to return the id's of each of those users
 | 
				
			||||||
 | 
						virtual int GetFriendCount( int iFriendFlags ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the steamID of a user
 | 
				
			||||||
 | 
						// iFriend is a index of range [0, GetFriendCount())
 | 
				
			||||||
 | 
						// iFriendsFlags must be the same value as used in GetFriendCount()
 | 
				
			||||||
 | 
						// the returned CSteamID can then be used by all the functions below to access details about the user
 | 
				
			||||||
 | 
						virtual CSteamID GetFriendByIndex( int iFriend, int iFriendFlags ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns a relationship to a user
 | 
				
			||||||
 | 
						virtual EFriendRelationship GetFriendRelationship( CSteamID steamIDFriend ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the current status of the specified user
 | 
				
			||||||
 | 
						// this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user
 | 
				
			||||||
 | 
						virtual EPersonaState GetFriendPersonaState( CSteamID steamIDFriend ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the name another user - guaranteed to not be NULL.
 | 
				
			||||||
 | 
						// same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user
 | 
				
			||||||
 | 
						// note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously
 | 
				
			||||||
 | 
						// 
 | 
				
			||||||
 | 
						virtual const char *GetFriendPersonaName( CSteamID steamIDFriend ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// gets the avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set
 | 
				
			||||||
 | 
						virtual int GetFriendAvatar( CSteamID steamIDFriend ) = 0;
 | 
				
			||||||
 | 
						// returns true if the friend is actually in a game
 | 
				
			||||||
 | 
						virtual bool GetFriendGamePlayed( CSteamID steamIDFriend, uint64 *pulGameID, uint32 *punGameIP, uint16 *pusGamePort, uint16 *pusQueryPort ) = 0;
 | 
				
			||||||
 | 
						// accesses old friends names - returns an empty string when their are no more items in the history
 | 
				
			||||||
 | 
						virtual const char *GetFriendPersonaNameHistory( CSteamID steamIDFriend, int iPersonaName ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns true if the specified user meets any of the criteria specified in iFriendFlags
 | 
				
			||||||
 | 
						// iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values
 | 
				
			||||||
 | 
						virtual bool HasFriend( CSteamID steamIDFriend, int iFriendFlags ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// clan (group) iteration and access functions
 | 
				
			||||||
 | 
						virtual int GetClanCount() = 0;
 | 
				
			||||||
 | 
						virtual CSteamID GetClanByIndex( int iClan ) = 0;
 | 
				
			||||||
 | 
						virtual const char *GetClanName( CSteamID steamIDClan ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// iterators for getting users in a chat room, lobby, game server or clan
 | 
				
			||||||
 | 
						// note that large clans that cannot be iterated by the local user
 | 
				
			||||||
 | 
						// steamIDSource can be the steamID of a group, game server, lobby or chat room
 | 
				
			||||||
 | 
						virtual int GetFriendCountFromSource( CSteamID steamIDSource ) = 0;
 | 
				
			||||||
 | 
						virtual CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns true if the local user can see that steamIDUser is a member or in steamIDSource
 | 
				
			||||||
 | 
						virtual bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI)
 | 
				
			||||||
 | 
						virtual void SetInGameVoiceSpeaking( CSteamID steamIDUser, bool bSpeaking ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// activates the game overlay, with an optional dialog to open ("Friends", "Community", "Players", "Settings")
 | 
				
			||||||
 | 
						virtual void ActivateGameOverlay( const char *pchDialog ) = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // ISTEAMFRIENDS003_H
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,84 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ISTEAMGAMESERVER004_H
 | 
				
			||||||
 | 
					#define ISTEAMGAMESERVER004_H
 | 
				
			||||||
 | 
					#ifdef STEAM_WIN32
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ISteamGameServer004
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						// connection functions
 | 
				
			||||||
 | 
						virtual void LogOn() = 0;
 | 
				
			||||||
 | 
						virtual void LogOff() = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// status functions
 | 
				
			||||||
 | 
						virtual bool BLoggedOn() = 0;
 | 
				
			||||||
 | 
						virtual bool BSecure() = 0; 
 | 
				
			||||||
 | 
						virtual CSteamID GetSteamID() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Handles receiving a new connection from a Steam user.  This call will ask the Steam
 | 
				
			||||||
 | 
						// servers to validate the users identity, app ownership, and VAC status.  If the Steam servers 
 | 
				
			||||||
 | 
						// are off-line, then it will validate the cached ticket itself which will validate app ownership 
 | 
				
			||||||
 | 
						// and identity.  The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection()
 | 
				
			||||||
 | 
						// and must then be sent up to the game server for authentication.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Return Value: true/false depending on whether the call succeeds.  If the call succeeds then you
 | 
				
			||||||
 | 
						// should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication
 | 
				
			||||||
 | 
						// for the user has succeeded or failed.
 | 
				
			||||||
 | 
						virtual void SendUserConnectAndAuthenticate( CSteamID steamIDUser, uint32 unIPClient, void *pvAuthBlob, uint32 cubAuthBlobSize ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation.  
 | 
				
			||||||
 | 
						// 
 | 
				
			||||||
 | 
						// Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect()
 | 
				
			||||||
 | 
						// when this user leaves the server just like you would for a real user.
 | 
				
			||||||
 | 
						virtual CSteamID CreateUnauthenticatedUserConnection() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Should be called whenever a user leaves our game server, this lets Steam internally
 | 
				
			||||||
 | 
						// track which users are currently on which servers for the purposes of preventing a single
 | 
				
			||||||
 | 
						// account being logged into multiple servers, showing who is currently on a server, etc.
 | 
				
			||||||
 | 
						virtual void SendUserDisconnect( CSteamID steamIDUser ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Update the data to be displayed in the server browser and matchmaking interfaces for a user
 | 
				
			||||||
 | 
						// currently connected to the server.  For regular users you must call this after you receive a
 | 
				
			||||||
 | 
						// GSUserValidationSuccess callback.
 | 
				
			||||||
 | 
						// 
 | 
				
			||||||
 | 
						// Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player)
 | 
				
			||||||
 | 
						virtual bool BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// You shouldn't need to call this as it is called internally by SteamGameServer_Init() and can only be called once.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// To update the data in this call which may change during the servers lifetime see UpdateServerStatus() below.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Input:	nGameAppID - The Steam assigned AppID for the game
 | 
				
			||||||
 | 
						//			unServerFlags - Any applicable combination of flags (see k_unServerFlag____ constants below)
 | 
				
			||||||
 | 
						//			unGameIP - The IP Address the server is listening for client connections on (might be INADDR_ANY)
 | 
				
			||||||
 | 
						//			unGamePort - The port which the server is listening for client connections on
 | 
				
			||||||
 | 
						//			unSpectatorPort - the port on which spectators can join to observe the server, 0 if spectating is not supported
 | 
				
			||||||
 | 
						//			usQueryPort - The port which the ISteamMasterServerUpdater API should use in order to listen for matchmaking requests
 | 
				
			||||||
 | 
						//			pchGameDir - A unique string identifier for your game
 | 
				
			||||||
 | 
						//			pchVersion - The current version of the server as a string like 1.0.0.0
 | 
				
			||||||
 | 
						//			bLanMode - Is this a LAN only server?
 | 
				
			||||||
 | 
						//			
 | 
				
			||||||
 | 
						// bugbug jmccaskey - figure out how to remove this from the API and only expose via SteamGameServer_Init... or make this actually used,
 | 
				
			||||||
 | 
						// and stop calling it in SteamGameServer_Init()?
 | 
				
			||||||
 | 
						virtual bool BSetServerType( int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, 
 | 
				
			||||||
 | 
													uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Updates server status values which shows up in the server browser and matchmaking APIs
 | 
				
			||||||
 | 
						virtual void UpdateServerStatus( int cPlayers, int cPlayersMax, int cBotPlayers, 
 | 
				
			||||||
 | 
														 const char *pchServerName, const char *pSpectatorServerName, 
 | 
				
			||||||
 | 
														 const char *pchMapName ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// This can be called if spectator goes away or comes back (passing 0 means there is no spectator server now).
 | 
				
			||||||
 | 
						virtual void UpdateSpectatorPort( uint16 unSpectatorPort ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Sets a string defining the "gametype" for this server, this is optional, but if it is set
 | 
				
			||||||
 | 
						// it allows users to filter in the matchmaking/server-browser interfaces based on the value
 | 
				
			||||||
 | 
						virtual void SetGameType( const char *pchGameType ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Ask if a user has a specific achievement for this game, will get a callback on reply
 | 
				
			||||||
 | 
						virtual bool BGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // ISTEAMGAMESERVER004_H
 | 
				
			||||||
| 
						 | 
					@ -891,7 +891,21 @@ struct LobbyCreated_t
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// used by now obsolete RequestFriendsLobbiesResponse_t
 | 
					// used by now obsolete RequestFriendsLobbiesResponse_t
 | 
				
			||||||
// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
 | 
					// enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Response to a RequestFriendsLobbies() call
 | 
				
			||||||
 | 
					//			One of these callbacks will be received per friend who is in a lobby
 | 
				
			||||||
 | 
					//			if no friends are in a lobby, then one of these will be called with 0 values
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					struct RequestFriendsLobbiesResponse_t
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						enum { k_iCallback = k_iSteamMatchmakingCallbacks + 14 };
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						uint64 m_ulSteamIDFriend;	// friend who is in a lobby; 0 if no friends in lobbies are found
 | 
				
			||||||
 | 
						uint64 m_ulSteamIDLobby;	// lobby that the friend is in; 0 if no friends in lobbies are found
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						int m_cResultIndex;			// result #, [1, m_cResultsTotal] if any are found; 0 if no friends in lobbies are found
 | 
				
			||||||
 | 
						int m_cResultsTotal;		// total number of results; 0 if no friends in lobbies are found
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
// Purpose: Result of CheckForPSNGameBootInvite
 | 
					// Purpose: Result of CheckForPSNGameBootInvite
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,126 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ISTEAMMATCHMAKING002_H
 | 
				
			||||||
 | 
					#define ISTEAMMATCHMAKING002_H
 | 
				
			||||||
 | 
					#ifdef STEAM_WIN32
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Functions for match making services for clients to get to favorites
 | 
				
			||||||
 | 
					//			and to operate on game lobbies.
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					class ISteamMatchmaking002
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						// game server favorites storage
 | 
				
			||||||
 | 
						// saves basic details about a multiplayer game server locally
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the number of favorites servers the user has stored
 | 
				
			||||||
 | 
						virtual int GetFavoriteGameCount() = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// returns the details of the game server
 | 
				
			||||||
 | 
						// iGame is of range [0,GetFavoriteGameCount())
 | 
				
			||||||
 | 
						// *pnIP, *pnConnPort are filled in the with IP:port of the game server
 | 
				
			||||||
 | 
						// *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
 | 
				
			||||||
 | 
						// *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
 | 
				
			||||||
 | 
						virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// adds the game server to the local list; updates the time played of the server if it already exists in the list
 | 
				
			||||||
 | 
						virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// removes the game server from the local storage; returns true if one was removed
 | 
				
			||||||
 | 
					    virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						///////
 | 
				
			||||||
 | 
						// Game lobby functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get a list of relevant lobbies
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyMatchList_t callback, with the number of servers requested
 | 
				
			||||||
 | 
						// if the user is not currently connected to Steam (i.e. SteamUser()->BLoggedOn() returns false) then
 | 
				
			||||||
 | 
						// a LobbyMatchList_t callback will be posted immediately with no servers
 | 
				
			||||||
 | 
						virtual void RequestLobbyList_OLD() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
 | 
				
			||||||
 | 
						// should only be called after a LobbyMatchList_t callback is received
 | 
				
			||||||
 | 
						// iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
 | 
				
			||||||
 | 
						// the returned CSteamID::IsValid() will be false if iLobby is out of range
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Create a lobby on the Steam servers.
 | 
				
			||||||
 | 
						// If bPrivate is true, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
 | 
				
			||||||
 | 
						// of the lobby will need to be communicated via game channels or via InviteUserToLobby()
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyCreated_t callback when the lobby has been created;
 | 
				
			||||||
 | 
						// local user will the join the lobby, resulting in an additional LobbyEnter_t callback being sent
 | 
				
			||||||
 | 
						// operations on the chat room can only proceed once the LobbyEnter_t has been received
 | 
				
			||||||
 | 
						virtual void CreateLobby( bool bPrivate ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Joins an existing lobby
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyEnter_t callback when the lobby has been joined
 | 
				
			||||||
 | 
						virtual void JoinLobby_OLD( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Leave a lobby; this will take effect immediately on the client side
 | 
				
			||||||
 | 
						// other users in the lobby will be notified by a LobbyChatUpdate_t callback
 | 
				
			||||||
 | 
						virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Invite another user to the lobby
 | 
				
			||||||
 | 
						// the target user will receive a LobbyInvite_t callback
 | 
				
			||||||
 | 
						// will return true if the invite is successfully sent, whether or not the target responds
 | 
				
			||||||
 | 
						// returns false if the local user is not connected to the Steam servers
 | 
				
			||||||
 | 
						virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Lobby iteration, for viewing details of users in a lobby
 | 
				
			||||||
 | 
						// only accessible if the lobby user is a member of the specified lobby
 | 
				
			||||||
 | 
						// persona information for other lobby members (name, avatar, etc.) will be asynchronously received
 | 
				
			||||||
 | 
						// and accessible via ISteamFriends interface
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// returns the number of users in the specified lobby
 | 
				
			||||||
 | 
						virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
						// returns the CSteamID of a user in the lobby
 | 
				
			||||||
 | 
						// iMember is of range [0,GetNumLobbyMembers())
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get data associated with this lobby
 | 
				
			||||||
 | 
						// takes a simple key, and returns the string associated with it
 | 
				
			||||||
 | 
						// "" will be returned if no value is set, or if steamIDLobby is invalid
 | 
				
			||||||
 | 
						virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
 | 
				
			||||||
 | 
						// Sets a key/value pair in the lobby metadata
 | 
				
			||||||
 | 
						// each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
 | 
				
			||||||
 | 
						// this can be used to set lobby names, map, etc.
 | 
				
			||||||
 | 
						// to reset a key, just set it to ""
 | 
				
			||||||
 | 
						// other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
 | 
				
			||||||
 | 
						virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// As above, but gets per-user data for someone in this lobby
 | 
				
			||||||
 | 
						virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
 | 
				
			||||||
 | 
						// Sets per-user metadata (for the local user implicitly)
 | 
				
			||||||
 | 
						virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Broadcasts a chat message to the all the users in the lobby
 | 
				
			||||||
 | 
						// users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
 | 
				
			||||||
 | 
						// returns true if the message is successfully sent
 | 
				
			||||||
 | 
						// pvMsgBody can be binary or text data, up to 4k
 | 
				
			||||||
 | 
						// if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
 | 
				
			||||||
 | 
						virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
 | 
				
			||||||
 | 
						// Get a chat message as specified in a LobbyChatMsg_t callback
 | 
				
			||||||
 | 
						// iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
 | 
				
			||||||
 | 
						// *pSteamIDUser is filled in with the CSteamID of the member
 | 
				
			||||||
 | 
						// *pvData is filled in with the message itself
 | 
				
			||||||
 | 
						// return value is the number of bytes written into the buffer
 | 
				
			||||||
 | 
						virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Fetch metadata for a lobby you're not necessarily in right now
 | 
				
			||||||
 | 
						// this will send down all the metadata associated with a lobby
 | 
				
			||||||
 | 
						// this is an asynchronous call
 | 
				
			||||||
 | 
						// returns false if the local user is not connected to the Steam servers
 | 
				
			||||||
 | 
						virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// sets the game server associated with the lobby
 | 
				
			||||||
 | 
						// usually at this point, the users will leave the lobby and join the specified game server
 | 
				
			||||||
 | 
						// either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
 | 
				
			||||||
 | 
						virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // ISTEAMMATCHMAKING002_H
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,151 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ISTEAMMATCHMAKING003_H
 | 
				
			||||||
 | 
					#define ISTEAMMATCHMAKING003_H
 | 
				
			||||||
 | 
					#ifdef STEAM_WIN32
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Functions for match making services for clients to get to favorites
 | 
				
			||||||
 | 
					//			and to operate on game lobbies.
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					class ISteamMatchmaking003
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						// game server favorites storage
 | 
				
			||||||
 | 
						// saves basic details about a multiplayer game server locally
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the number of favorites servers the user has stored
 | 
				
			||||||
 | 
						virtual int GetFavoriteGameCount() = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// returns the details of the game server
 | 
				
			||||||
 | 
						// iGame is of range [0,GetFavoriteGameCount())
 | 
				
			||||||
 | 
						// *pnIP, *pnConnPort are filled in the with IP:port of the game server
 | 
				
			||||||
 | 
						// *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
 | 
				
			||||||
 | 
						// *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
 | 
				
			||||||
 | 
						virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// adds the game server to the local list; updates the time played of the server if it already exists in the list
 | 
				
			||||||
 | 
						virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// removes the game server from the local storage; returns true if one was removed
 | 
				
			||||||
 | 
					    virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						///////
 | 
				
			||||||
 | 
						// Game lobby functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get a list of relevant lobbies
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyMatchList_t callback, with the number of servers requested
 | 
				
			||||||
 | 
						// if the user is not currently connected to Steam (i.e. SteamUser()->BLoggedOn() returns false) then
 | 
				
			||||||
 | 
						// a LobbyMatchList_t callback will be posted immediately with no servers
 | 
				
			||||||
 | 
						virtual void RequestLobbyList_OLD() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// filters for lobbies
 | 
				
			||||||
 | 
						// this needs to be called before RequestLobbyList() to take effect
 | 
				
			||||||
 | 
						// these are cleared on each call to RequestLobbyList()
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListFilter( const char *pchKeyToMatch, const char *pchValueToMatch ) = 0;
 | 
				
			||||||
 | 
						// numerical comparison - 0 is equal, -1 is the lobby value is less than nValueToMatch, 1 is the lobby value is greater than nValueToMatch
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, int nComparisonType /* 0 is equal, -1 is less than, 1 is greater than */ ) = 0;
 | 
				
			||||||
 | 
						// sets RequestLobbyList() to only returns lobbies which aren't yet full - needs SetLobbyMemberLimit() called on the lobby to set an initial limit
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListSlotsAvailableFilter() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
 | 
				
			||||||
 | 
						// should only be called after a LobbyMatchList_t callback is received
 | 
				
			||||||
 | 
						// iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
 | 
				
			||||||
 | 
						// the returned CSteamID::IsValid() will be false if iLobby is out of range
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Create a lobby on the Steam servers.
 | 
				
			||||||
 | 
						// If bPrivate is true, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
 | 
				
			||||||
 | 
						// of the lobby will need to be communicated via game channels or via InviteUserToLobby()
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyCreated_t callback when the lobby has been created;
 | 
				
			||||||
 | 
						// local user will the join the lobby, resulting in an additional LobbyEnter_t callback being sent
 | 
				
			||||||
 | 
						// operations on the chat room can only proceed once the LobbyEnter_t has been received
 | 
				
			||||||
 | 
						virtual void CreateLobby( bool bPrivate ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Joins an existing lobby
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyEnter_t callback when the lobby has been joined
 | 
				
			||||||
 | 
						// users already in the lobby will receive LobbyChatUpdate_t callback after this user has successfully joined
 | 
				
			||||||
 | 
						virtual void JoinLobby_OLD( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Leave a lobby; this will take effect immediately on the client side
 | 
				
			||||||
 | 
						// other users in the lobby will be notified by a LobbyChatUpdate_t callback
 | 
				
			||||||
 | 
						virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Invite another user to the lobby
 | 
				
			||||||
 | 
						// the target user will receive a LobbyInvite_t callback
 | 
				
			||||||
 | 
						// will return true if the invite is successfully sent, whether or not the target responds
 | 
				
			||||||
 | 
						// returns false if the local user is not connected to the Steam servers
 | 
				
			||||||
 | 
						virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Lobby iteration, for viewing details of users in a lobby
 | 
				
			||||||
 | 
						// only accessible if the lobby user is a member of the specified lobby
 | 
				
			||||||
 | 
						// persona information for other lobby members (name, avatar, etc.) will be asynchronously received
 | 
				
			||||||
 | 
						// and accessible via ISteamFriends interface
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// returns the number of users in the specified lobby
 | 
				
			||||||
 | 
						virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
						// returns the CSteamID of a user in the lobby
 | 
				
			||||||
 | 
						// iMember is of range [0,GetNumLobbyMembers())
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get data associated with this lobby
 | 
				
			||||||
 | 
						// takes a simple key, and returns the string associated with it
 | 
				
			||||||
 | 
						// "" will be returned if no value is set, or if steamIDLobby is invalid
 | 
				
			||||||
 | 
						virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
 | 
				
			||||||
 | 
						// Sets a key/value pair in the lobby metadata
 | 
				
			||||||
 | 
						// each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
 | 
				
			||||||
 | 
						// this can be used to set lobby names, map, etc.
 | 
				
			||||||
 | 
						// to reset a key, just set it to ""
 | 
				
			||||||
 | 
						// other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
 | 
				
			||||||
 | 
						virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// As above, but gets per-user data for someone in this lobby
 | 
				
			||||||
 | 
						virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
 | 
				
			||||||
 | 
						// Sets per-user metadata (for the local user implicitly)
 | 
				
			||||||
 | 
						virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Broadcasts a chat message to the all the users in the lobby
 | 
				
			||||||
 | 
						// users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
 | 
				
			||||||
 | 
						// returns true if the message is successfully sent
 | 
				
			||||||
 | 
						// pvMsgBody can be binary or text data, up to 4k
 | 
				
			||||||
 | 
						// if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
 | 
				
			||||||
 | 
						virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
 | 
				
			||||||
 | 
						// Get a chat message as specified in a LobbyChatMsg_t callback
 | 
				
			||||||
 | 
						// iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
 | 
				
			||||||
 | 
						// *pSteamIDUser is filled in with the CSteamID of the member
 | 
				
			||||||
 | 
						// *pvData is filled in with the message itself
 | 
				
			||||||
 | 
						// return value is the number of bytes written into the buffer
 | 
				
			||||||
 | 
						virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Fetch metadata for a lobby you're not necessarily in right now
 | 
				
			||||||
 | 
						// this will send down all the metadata associated with a lobby
 | 
				
			||||||
 | 
						// this is an asynchronous call
 | 
				
			||||||
 | 
						// returns false if the local user is not connected to the Steam servers
 | 
				
			||||||
 | 
						virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// sets the game server associated with the lobby
 | 
				
			||||||
 | 
						// usually at this point, the users will leave the lobby and join the specified game server
 | 
				
			||||||
 | 
						// either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
 | 
				
			||||||
 | 
						virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
 | 
				
			||||||
 | 
						// returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
 | 
				
			||||||
 | 
						virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// set the limit on the # of users who can join the lobby
 | 
				
			||||||
 | 
						virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
 | 
				
			||||||
 | 
						// returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
 | 
				
			||||||
 | 
						virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void SetLobbyVoiceEnabled( CSteamID steamIDLobby, bool bVoiceEnabled ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// asks the Steam servers for a list of lobbies that friends are in
 | 
				
			||||||
 | 
						// returns results by posting one RequestFriendsLobbiesResponse_t callback per friend/lobby pair
 | 
				
			||||||
 | 
						// if no friends are in lobbies, RequestFriendsLobbiesResponse_t will be posted but with 0 results
 | 
				
			||||||
 | 
						// filters don't apply to lobbies (currently)
 | 
				
			||||||
 | 
						virtual bool RequestFriendsLobbies() = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // ISTEAMMATCHMAKING003_H
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,149 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ISTEAMMATCHMAKING004_H
 | 
				
			||||||
 | 
					#define ISTEAMMATCHMAKING004_H
 | 
				
			||||||
 | 
					#ifdef STEAM_WIN32
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Functions for match making services for clients to get to favorites
 | 
				
			||||||
 | 
					//			and to operate on game lobbies.
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					class ISteamMatchmaking004
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						// game server favorites storage
 | 
				
			||||||
 | 
						// saves basic details about a multiplayer game server locally
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the number of favorites servers the user has stored
 | 
				
			||||||
 | 
						virtual int GetFavoriteGameCount() = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// returns the details of the game server
 | 
				
			||||||
 | 
						// iGame is of range [0,GetFavoriteGameCount())
 | 
				
			||||||
 | 
						// *pnIP, *pnConnPort are filled in the with IP:port of the game server
 | 
				
			||||||
 | 
						// *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
 | 
				
			||||||
 | 
						// *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
 | 
				
			||||||
 | 
						virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// adds the game server to the local list; updates the time played of the server if it already exists in the list
 | 
				
			||||||
 | 
						virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// removes the game server from the local storage; returns true if one was removed
 | 
				
			||||||
 | 
					    virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						///////
 | 
				
			||||||
 | 
						// Game lobby functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get a list of relevant lobbies
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyMatchList_t callback, with the number of servers requested
 | 
				
			||||||
 | 
						// if the user is not currently connected to Steam (i.e. SteamUser()->BLoggedOn() returns false) then
 | 
				
			||||||
 | 
						// a LobbyMatchList_t callback will be posted immediately with no servers
 | 
				
			||||||
 | 
						virtual void RequestLobbyList_OLD() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// filters for lobbies
 | 
				
			||||||
 | 
						// this needs to be called before RequestLobbyList() to take effect
 | 
				
			||||||
 | 
						// these are cleared on each call to RequestLobbyList()
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListFilter( const char *pchKeyToMatch, const char *pchValueToMatch ) = 0;
 | 
				
			||||||
 | 
						// numerical comparison - 0 is equal, -1 is the lobby value is less than nValueToMatch, 1 is the lobby value is greater than nValueToMatch
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, int nComparisonType /* 0 is equal, -1 is less than, 1 is greater than */ ) = 0;
 | 
				
			||||||
 | 
						// sets RequestLobbyList() to only returns lobbies which aren't yet full - needs SetLobbyMemberLimit() called on the lobby to set an initial limit
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListSlotsAvailableFilter() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
 | 
				
			||||||
 | 
						// should only be called after a LobbyMatchList_t callback is received
 | 
				
			||||||
 | 
						// iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
 | 
				
			||||||
 | 
						// the returned CSteamID::IsValid() will be false if iLobby is out of range
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Create a lobby on the Steam servers.
 | 
				
			||||||
 | 
						// If bPrivate is true, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
 | 
				
			||||||
 | 
						// of the lobby will need to be communicated via game channels or via InviteUserToLobby()
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyCreated_t callback when the lobby has been created;
 | 
				
			||||||
 | 
						// local user will the join the lobby, resulting in an additional LobbyEnter_t callback being sent
 | 
				
			||||||
 | 
						// operations on the chat room can only proceed once the LobbyEnter_t has been received
 | 
				
			||||||
 | 
						virtual void CreateLobby( bool bPrivate ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Joins an existing lobby
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyEnter_t callback when the lobby has been joined
 | 
				
			||||||
 | 
						// users already in the lobby will receive LobbyChatUpdate_t callback after this user has successfully joined
 | 
				
			||||||
 | 
						virtual void JoinLobby_OLD( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Leave a lobby; this will take effect immediately on the client side
 | 
				
			||||||
 | 
						// other users in the lobby will be notified by a LobbyChatUpdate_t callback
 | 
				
			||||||
 | 
						virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Invite another user to the lobby
 | 
				
			||||||
 | 
						// the target user will receive a LobbyInvite_t callback
 | 
				
			||||||
 | 
						// will return true if the invite is successfully sent, whether or not the target responds
 | 
				
			||||||
 | 
						// returns false if the local user is not connected to the Steam servers
 | 
				
			||||||
 | 
						virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Lobby iteration, for viewing details of users in a lobby
 | 
				
			||||||
 | 
						// only accessible if the lobby user is a member of the specified lobby
 | 
				
			||||||
 | 
						// persona information for other lobby members (name, avatar, etc.) will be asynchronously received
 | 
				
			||||||
 | 
						// and accessible via ISteamFriends interface
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// returns the number of users in the specified lobby
 | 
				
			||||||
 | 
						virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
						// returns the CSteamID of a user in the lobby
 | 
				
			||||||
 | 
						// iMember is of range [0,GetNumLobbyMembers())
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get data associated with this lobby
 | 
				
			||||||
 | 
						// takes a simple key, and returns the string associated with it
 | 
				
			||||||
 | 
						// "" will be returned if no value is set, or if steamIDLobby is invalid
 | 
				
			||||||
 | 
						virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
 | 
				
			||||||
 | 
						// Sets a key/value pair in the lobby metadata
 | 
				
			||||||
 | 
						// each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
 | 
				
			||||||
 | 
						// this can be used to set lobby names, map, etc.
 | 
				
			||||||
 | 
						// to reset a key, just set it to ""
 | 
				
			||||||
 | 
						// other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
 | 
				
			||||||
 | 
						virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// As above, but gets per-user data for someone in this lobby
 | 
				
			||||||
 | 
						virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
 | 
				
			||||||
 | 
						// Sets per-user metadata (for the local user implicitly)
 | 
				
			||||||
 | 
						virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Broadcasts a chat message to the all the users in the lobby
 | 
				
			||||||
 | 
						// users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
 | 
				
			||||||
 | 
						// returns true if the message is successfully sent
 | 
				
			||||||
 | 
						// pvMsgBody can be binary or text data, up to 4k
 | 
				
			||||||
 | 
						// if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
 | 
				
			||||||
 | 
						virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
 | 
				
			||||||
 | 
						// Get a chat message as specified in a LobbyChatMsg_t callback
 | 
				
			||||||
 | 
						// iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
 | 
				
			||||||
 | 
						// *pSteamIDUser is filled in with the CSteamID of the member
 | 
				
			||||||
 | 
						// *pvData is filled in with the message itself
 | 
				
			||||||
 | 
						// return value is the number of bytes written into the buffer
 | 
				
			||||||
 | 
						virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Fetch metadata for a lobby you're not necessarily in right now
 | 
				
			||||||
 | 
						// this will send down all the metadata associated with a lobby
 | 
				
			||||||
 | 
						// this is an asynchronous call
 | 
				
			||||||
 | 
						// returns false if the local user is not connected to the Steam servers
 | 
				
			||||||
 | 
						virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// sets the game server associated with the lobby
 | 
				
			||||||
 | 
						// usually at this point, the users will leave the lobby and join the specified game server
 | 
				
			||||||
 | 
						// either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
 | 
				
			||||||
 | 
						virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
 | 
				
			||||||
 | 
						// returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
 | 
				
			||||||
 | 
						virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// set the limit on the # of users who can join the lobby
 | 
				
			||||||
 | 
						virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
 | 
				
			||||||
 | 
						// returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
 | 
				
			||||||
 | 
						virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// asks the Steam servers for a list of lobbies that friends are in
 | 
				
			||||||
 | 
						// returns results by posting one RequestFriendsLobbiesResponse_t callback per friend/lobby pair
 | 
				
			||||||
 | 
						// if no friends are in lobbies, RequestFriendsLobbiesResponse_t will be posted but with 0 results
 | 
				
			||||||
 | 
						// filters don't apply to lobbies (currently)
 | 
				
			||||||
 | 
						virtual bool RequestFriendsLobbies() = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // ISTEAMMATCHMAKING004_H
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,177 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef ISTEAMMATCHMAKING005_H
 | 
				
			||||||
 | 
					#define ISTEAMMATCHMAKING005_H
 | 
				
			||||||
 | 
					#ifdef STEAM_WIN32
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Functions for match making services for clients to get to favorites
 | 
				
			||||||
 | 
					//			and to operate on game lobbies.
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					class ISteamMatchmaking005
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						// game server favorites storage
 | 
				
			||||||
 | 
						// saves basic details about a multiplayer game server locally
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the number of favorites servers the user has stored
 | 
				
			||||||
 | 
						virtual int GetFavoriteGameCount() = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// returns the details of the game server
 | 
				
			||||||
 | 
						// iGame is of range [0,GetFavoriteGameCount())
 | 
				
			||||||
 | 
						// *pnIP, *pnConnPort are filled in the with IP:port of the game server
 | 
				
			||||||
 | 
						// *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections
 | 
				
			||||||
 | 
						// *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added
 | 
				
			||||||
 | 
						virtual bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// adds the game server to the local list; updates the time played of the server if it already exists in the list
 | 
				
			||||||
 | 
						virtual int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer ) =0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// removes the game server from the local storage; returns true if one was removed
 | 
				
			||||||
 | 
					    virtual bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						///////
 | 
				
			||||||
 | 
						// Game lobby functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get a list of relevant lobbies
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found
 | 
				
			||||||
 | 
						// this will never return lobbies that are full
 | 
				
			||||||
 | 
						// to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call
 | 
				
			||||||
 | 
						// use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g.
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
							class CMyLobbyListManager
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								CCallResult<CMyLobbyListManager, LobbyMatchList_t> m_CallResultLobbyMatchList;
 | 
				
			||||||
 | 
								void FindLobbies()
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									// SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList()
 | 
				
			||||||
 | 
									SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList();
 | 
				
			||||||
 | 
									m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList );
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure )
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									// lobby list has be retrieved from Steam back-end, use results
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
						// 
 | 
				
			||||||
 | 
						virtual void RequestLobbyList_OLD() = 0;
 | 
				
			||||||
 | 
						// filters for lobbies
 | 
				
			||||||
 | 
						// this needs to be called before RequestLobbyList() to take effect
 | 
				
			||||||
 | 
						// these are cleared on each call to RequestLobbyList()
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListFilter( const char *pchKeyToMatch, const char *pchValueToMatch ) = 0;
 | 
				
			||||||
 | 
						// numerical comparison
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, int nComparisonType ) = 0;
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListSlotsAvailableFilter() = 0;
 | 
				
			||||||
 | 
						// returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence
 | 
				
			||||||
 | 
						virtual void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the CSteamID of a lobby, as retrieved by a RequestLobbyList call
 | 
				
			||||||
 | 
						// should only be called after a LobbyMatchList_t callback is received
 | 
				
			||||||
 | 
						// iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching)
 | 
				
			||||||
 | 
						// the returned CSteamID::IsValid() will be false if iLobby is out of range
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyByIndex( int iLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Create a lobby on the Steam servers.
 | 
				
			||||||
 | 
						// If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID
 | 
				
			||||||
 | 
						// of the lobby will need to be communicated via game channels or via InviteUserToLobby()
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this pointer
 | 
				
			||||||
 | 
						// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby)
 | 
				
			||||||
 | 
						virtual void CreateLobby_OLD( ELobbyType eLobbyType ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Joins an existing lobby
 | 
				
			||||||
 | 
						// this is an asynchronous request
 | 
				
			||||||
 | 
						// results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful
 | 
				
			||||||
 | 
						// lobby metadata is available to use immediately on this call completing
 | 
				
			||||||
 | 
						virtual void JoinLobby_OLD( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Leave a lobby; this will take effect immediately on the client side
 | 
				
			||||||
 | 
						// other users in the lobby will be notified by a LobbyChatUpdate_t callback
 | 
				
			||||||
 | 
						virtual void LeaveLobby( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Invite another user to the lobby
 | 
				
			||||||
 | 
						// the target user will receive a LobbyInvite_t callback
 | 
				
			||||||
 | 
						// will return true if the invite is successfully sent, whether or not the target responds
 | 
				
			||||||
 | 
						// returns false if the local user is not connected to the Steam servers
 | 
				
			||||||
 | 
						virtual bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Lobby iteration, for viewing details of users in a lobby
 | 
				
			||||||
 | 
						// only accessible if the lobby user is a member of the specified lobby
 | 
				
			||||||
 | 
						// persona information for other lobby members (name, avatar, etc.) will be asynchronously received
 | 
				
			||||||
 | 
						// and accessible via ISteamFriends interface
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// returns the number of users in the specified lobby
 | 
				
			||||||
 | 
						virtual int GetNumLobbyMembers( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
						// returns the CSteamID of a user in the lobby
 | 
				
			||||||
 | 
						// iMember is of range [0,GetNumLobbyMembers())
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get data associated with this lobby
 | 
				
			||||||
 | 
						// takes a simple key, and returns the string associated with it
 | 
				
			||||||
 | 
						// "" will be returned if no value is set, or if steamIDLobby is invalid
 | 
				
			||||||
 | 
						virtual const char *GetLobbyData( CSteamID steamIDLobby, const char *pchKey ) = 0;
 | 
				
			||||||
 | 
						// Sets a key/value pair in the lobby metadata
 | 
				
			||||||
 | 
						// each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data
 | 
				
			||||||
 | 
						// this can be used to set lobby names, map, etc.
 | 
				
			||||||
 | 
						// to reset a key, just set it to ""
 | 
				
			||||||
 | 
						// other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback
 | 
				
			||||||
 | 
						virtual bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// As above, but gets per-user data for someone in this lobby
 | 
				
			||||||
 | 
						virtual const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey ) = 0;
 | 
				
			||||||
 | 
						// Sets per-user metadata (for the local user implicitly)
 | 
				
			||||||
 | 
						virtual void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue ) = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Broadcasts a chat message to the all the users in the lobby
 | 
				
			||||||
 | 
						// users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
 | 
				
			||||||
 | 
						// returns true if the message is successfully sent
 | 
				
			||||||
 | 
						// pvMsgBody can be binary or text data, up to 4k
 | 
				
			||||||
 | 
						// if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
 | 
				
			||||||
 | 
						virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
 | 
				
			||||||
 | 
						// Get a chat message as specified in a LobbyChatMsg_t callback
 | 
				
			||||||
 | 
						// iChatID is the LobbyChatMsg_t::m_iChatID value in the callback
 | 
				
			||||||
 | 
						// *pSteamIDUser is filled in with the CSteamID of the member
 | 
				
			||||||
 | 
						// *pvData is filled in with the message itself
 | 
				
			||||||
 | 
						// return value is the number of bytes written into the buffer
 | 
				
			||||||
 | 
						virtual int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Refreshes metadata for a lobby you're not necessarily in right now
 | 
				
			||||||
 | 
						// you never do this for lobbies you're a member of, only if your
 | 
				
			||||||
 | 
						// this will send down all the metadata associated with a lobby
 | 
				
			||||||
 | 
						// this is an asynchronous call
 | 
				
			||||||
 | 
						// returns false if the local user is not connected to the Steam servers
 | 
				
			||||||
 | 
						// restart are returned by a LobbyDataUpdate_t callback
 | 
				
			||||||
 | 
						virtual bool RequestLobbyData( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// sets the game server associated with the lobby
 | 
				
			||||||
 | 
						// usually at this point, the users will join the specified game server
 | 
				
			||||||
 | 
						// either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect
 | 
				
			||||||
 | 
						virtual void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer ) = 0;
 | 
				
			||||||
 | 
						// returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist
 | 
				
			||||||
 | 
						virtual bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// set the limit on the # of users who can join the lobby
 | 
				
			||||||
 | 
						virtual bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers ) = 0;
 | 
				
			||||||
 | 
						// returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined
 | 
				
			||||||
 | 
						virtual int GetLobbyMemberLimit( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual bool RequestFriendsLobbies() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// updates which type of lobby it is
 | 
				
			||||||
 | 
						// only lobbies that are k_ELobbyTypePublic will be returned by RequestLobbyList() calls
 | 
				
			||||||
 | 
						virtual bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// returns the current lobby owner
 | 
				
			||||||
 | 
						// you must be a member of the lobby to access this
 | 
				
			||||||
 | 
						// there always one lobby owner - if the current owner leaves, another user will become the owner
 | 
				
			||||||
 | 
						// it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner
 | 
				
			||||||
 | 
						virtual CSteamID GetLobbyOwner( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual float GetLobbyDistance( CSteamID steamIDLobby ) = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // ISTEAMMATCHMAKING005_H
 | 
				
			||||||
| 
						 | 
					@ -191,4 +191,118 @@ public:
 | 
				
			||||||
	virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
 | 
						virtual bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner ) = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Callback interfaces for server list functions (see ISteamMatchmakingServers below)
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The idea here is that your game code implements objects that implement these
 | 
				
			||||||
 | 
					// interfaces to receive callback notifications after calling asynchronous functions
 | 
				
			||||||
 | 
					// inside the ISteamMatchmakingServers() interface below.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This is different than normal Steam callback handling due to the potentially
 | 
				
			||||||
 | 
					// large size of server lists.
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Callback interface for receiving responses after a server list refresh
 | 
				
			||||||
 | 
					// or an individual server update.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Since you get these callbacks after requesting full list refreshes you will
 | 
				
			||||||
 | 
					// usually implement this interface inside an object like CServerBrowser.  If that
 | 
				
			||||||
 | 
					// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
 | 
				
			||||||
 | 
					// to cancel any in-progress queries so you don't get a callback into the destructed
 | 
				
			||||||
 | 
					// object and crash.
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					class ISteamMatchmakingServerListResponse001
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						// Server has responded ok with updated data
 | 
				
			||||||
 | 
						virtual void ServerResponded( int iServer ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Server has failed to respond
 | 
				
			||||||
 | 
						virtual void ServerFailedToRespond( int iServer ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// A list refresh you had initiated is now 100% completed
 | 
				
			||||||
 | 
						virtual void RefreshComplete( EMatchMakingServerResponse response ) = 0; 
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum EMatchMakingType
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						eInternetServer = 0,
 | 
				
			||||||
 | 
						eLANServer,
 | 
				
			||||||
 | 
						eFriendsServer,
 | 
				
			||||||
 | 
						eFavoritesServer,
 | 
				
			||||||
 | 
						eHistoryServer,
 | 
				
			||||||
 | 
						eSpectatorServer,
 | 
				
			||||||
 | 
						eInvalidServer 
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Purpose: Functions for match making services for clients to get to game lists and details
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					class ISteamMatchmakingServers001
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						// Request a new list of servers of a particular type.  These calls each correspond to one of the EMatchMakingType values.
 | 
				
			||||||
 | 
						virtual void RequestInternetServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse ) = 0;
 | 
				
			||||||
 | 
						virtual void RequestLANServerList( AppId_t iApp, ISteamMatchmakingServerListResponse001 *pRequestServersResponse ) = 0;
 | 
				
			||||||
 | 
						virtual void RequestFriendsServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse ) = 0;
 | 
				
			||||||
 | 
						virtual void RequestFavoritesServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse ) = 0;
 | 
				
			||||||
 | 
						virtual void RequestHistoryServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse ) = 0;
 | 
				
			||||||
 | 
						virtual void RequestSpectatorServerList( AppId_t iApp, MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse001 *pRequestServersResponse ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* the filters that are available in the ppchFilters params are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							"map"		- map the server is running, as set in the dedicated server api
 | 
				
			||||||
 | 
							"dedicated" - reports bDedicated from the API
 | 
				
			||||||
 | 
							"secure"	- VAC-enabled
 | 
				
			||||||
 | 
							"full"		- not full
 | 
				
			||||||
 | 
							"empty"		- not empty
 | 
				
			||||||
 | 
							"noplayers" - is empty
 | 
				
			||||||
 | 
							"proxy"		- a relay server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get details on a given server in the list, you can get the valid range of index
 | 
				
			||||||
 | 
						// values by calling GetServerCount().  You will also receive index values in 
 | 
				
			||||||
 | 
						// ISteamMatchmakingServerListResponse::ServerResponded() callbacks
 | 
				
			||||||
 | 
						virtual gameserveritem_t *GetServerDetails( EMatchMakingType eType, int iServer ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Cancel an request which is operation on the given list type.  You should call this to cancel
 | 
				
			||||||
 | 
						// any in-progress requests before destructing a callback object that may have been passed 
 | 
				
			||||||
 | 
						// to one of the above list request calls.  Not doing so may result in a crash when a callback
 | 
				
			||||||
 | 
						// occurs on the destructed object.
 | 
				
			||||||
 | 
						virtual void CancelQuery( EMatchMakingType eType ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Ping every server in your list again but don't update the list of servers
 | 
				
			||||||
 | 
						virtual void RefreshQuery( EMatchMakingType eType ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Returns true if the list is currently refreshing its server list
 | 
				
			||||||
 | 
						virtual bool IsRefreshing( EMatchMakingType eType ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1
 | 
				
			||||||
 | 
						virtual int GetServerCount( EMatchMakingType eType ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Refresh a single server inside of a query (rather than all the servers )
 | 
				
			||||||
 | 
						virtual void RefreshServer( EMatchMakingType eType, int iServer ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
						// Queries to individual servers directly via IP/Port
 | 
				
			||||||
 | 
						//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Request updated ping time and other details from a single server
 | 
				
			||||||
 | 
						virtual HServerQuery PingServer( uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Request the list of players currently playing on a server
 | 
				
			||||||
 | 
						virtual HServerQuery PlayerDetails( uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Request the list of rules that the server is running (See ISteamMasterServerUpdater->SetKeyValue() to set the rules server side)
 | 
				
			||||||
 | 
						virtual HServerQuery ServerRules( uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse ) = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Cancel an outstanding Ping/Players/Rules query from above.  You should call this to cancel
 | 
				
			||||||
 | 
						// any in-progress requests before destructing a callback object that may have been passed 
 | 
				
			||||||
 | 
						// to one of the above calls to avoid crashing when callbacks occur.
 | 
				
			||||||
 | 
						virtual void CancelServerQuery( HServerQuery hServerQuery ) = 0; 
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // ISTEAMMATCHMAKING007_H
 | 
					#endif // ISTEAMMATCHMAKING007_H
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,6 +49,7 @@
 | 
				
			||||||
#include "isteamuser019.h"
 | 
					#include "isteamuser019.h"
 | 
				
			||||||
#include "isteamuser020.h"
 | 
					#include "isteamuser020.h"
 | 
				
			||||||
#include "isteamfriends.h"
 | 
					#include "isteamfriends.h"
 | 
				
			||||||
 | 
					#include "isteamfriends003.h"
 | 
				
			||||||
#include "isteamfriends004.h"
 | 
					#include "isteamfriends004.h"
 | 
				
			||||||
#include "isteamfriends005.h"
 | 
					#include "isteamfriends005.h"
 | 
				
			||||||
#include "isteamfriends006.h"
 | 
					#include "isteamfriends006.h"
 | 
				
			||||||
| 
						 | 
					@ -72,6 +73,10 @@
 | 
				
			||||||
#include "isteamutils008.h"
 | 
					#include "isteamutils008.h"
 | 
				
			||||||
#include "isteamutils009.h"
 | 
					#include "isteamutils009.h"
 | 
				
			||||||
#include "isteammatchmaking.h"
 | 
					#include "isteammatchmaking.h"
 | 
				
			||||||
 | 
					#include "isteammatchmaking002.h"
 | 
				
			||||||
 | 
					#include "isteammatchmaking003.h"
 | 
				
			||||||
 | 
					#include "isteammatchmaking004.h"
 | 
				
			||||||
 | 
					#include "isteammatchmaking005.h"
 | 
				
			||||||
#include "isteammatchmaking006.h"
 | 
					#include "isteammatchmaking006.h"
 | 
				
			||||||
#include "isteammatchmaking007.h"
 | 
					#include "isteammatchmaking007.h"
 | 
				
			||||||
#include "isteammatchmaking008.h"
 | 
					#include "isteammatchmaking008.h"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@
 | 
				
			||||||
#include "isteamgameserver009.h"
 | 
					#include "isteamgameserver009.h"
 | 
				
			||||||
#include "isteamgameserver008.h"
 | 
					#include "isteamgameserver008.h"
 | 
				
			||||||
#include "isteamgameserver005.h"
 | 
					#include "isteamgameserver005.h"
 | 
				
			||||||
 | 
					#include "isteamgameserver004.h"
 | 
				
			||||||
#include "isteamgameserverstats.h"
 | 
					#include "isteamgameserverstats.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum EServerMode
 | 
					enum EServerMode
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue