|
|
//===== Copyright � 1996-2009, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
//===========================================================================//
#ifndef MM_SESSION_ONLINE_SEARCH_H
#define MM_SESSION_ONLINE_SEARCH_H
#ifdef _WIN32
#pragma once
#endif
//
// CMatchSessionOnlineSearch
//
// Implementation of an online session search (aka matchmaking)
//
class CMatchSearcher_OnlineSearch;
class CMatchSessionOnlineSearch : public IMatchSessionInternal { // Methods of IMatchSession
public: // Get an internal pointer to session system-specific data
virtual KeyValues * GetSessionSystemData() { return NULL; } // Get an internal pointer to session settings
virtual KeyValues * GetSessionSettings();
// Update session settings, only changing keys and values need
// to be passed and they will be updated
virtual void UpdateSessionSettings( KeyValues *pSettings );
virtual void UpdateTeamProperties( KeyValues *pTeamProperties );
// Issue a session command
virtual void Command( KeyValues *pCommand );
virtual uint64 GetSessionID();
// Run a frame update
virtual void Update();
// Destroy the session object
virtual void Destroy();
// Debug print a session object
virtual void DebugPrint();
// Check if another session is joinable
virtual bool IsAnotherSessionJoinable( char const *pszAnotherSessionInfo ) { return true; }
// Process event
virtual void OnEvent( KeyValues *pEvent );
enum Result { RESULT_UNDEFINED, RESULT_SUCCESS, RESULT_FAIL };
Result GetResult() { return m_result; }
public: explicit CMatchSessionOnlineSearch( KeyValues *pSettings ); virtual ~CMatchSessionOnlineSearch();
protected: CMatchSessionOnlineSearch(); // for derived classes construction
//
// Overrides when search is used as a nested object
//
protected: virtual CMatchSearcher *OnStartSearching(); virtual void OnSearchCompletedEmpty( KeyValues *pSettings ); virtual void OnSearchCompletedSuccess( CSysSessionClient *pSysSession, KeyValues *pSettings ); virtual void OnSearchEvent( KeyValues *pNotify ); virtual CSysSessionClient * OnBeginJoiningSearchResult();
protected: void StartJoinNextFoundSession(); void ValidateSearchResultWhitelist(); void ConnectJoinLobbyNextFoundSession(); void OnSearchDoneNoResultsMatch();
protected: KeyValues *m_pSettings; KeyValues::AutoDelete m_autodelete_pSettings;
friend class CMatchSearcher_OnlineSearch; CMatchSearcher *m_pMatchSearcher;
Result m_result;
enum State_t { STATE_INIT, STATE_SEARCHING, STATE_JOIN_NEXT, #if !defined( NO_STEAM )
STATE_VALIDATING_WHITELIST, #endif
STATE_JOINING, STATE_CLOSING, }; State_t m_eState;
CUtlVector< CMatchSearcher::SearchResult_t const * > m_arrSearchResults;
CSysSessionClient *m_pSysSession; CSysSessionConTeamHost *m_pSysSessionConTeam;
#if !defined( NO_STEAM )
void SetupSteamRankingConfiguration(); bool IsSteamRankingConfigured() const;
class CServerListListener : public ISteamMatchmakingServerListResponse { public: explicit CServerListListener( CMatchSessionOnlineSearch *pDsSearcher, CUtlVector< MatchMakingKeyValuePair_t > &filters ); void Destroy();
public: // Server has responded ok with updated data
virtual void ServerResponded( HServerListRequest hReq, int iServer ) { HandleServerResponse( hReq, iServer, true ); } // Server has failed to respond
virtual void ServerFailedToRespond( HServerListRequest hReq, int iServer ) { HandleServerResponse( hReq, iServer, false ); } // A list refresh you had initiated is now 100% completed
virtual void RefreshComplete( HServerListRequest hReq, EMatchMakingServerResponse response );
protected: void HandleServerResponse( HServerListRequest hReq, int iServer, bool bResponded ); CMatchSessionOnlineSearch *m_pOuter; HServerListRequest m_hRequest; }; friend class CServerListListener; CServerListListener *m_pServerListListener; void Steam_OnDedicatedServerListFetched(); #endif
float m_flInitializeTimestamp; };
class CMatchSearcher_OnlineSearch : public CMatchSearcher { public: CMatchSearcher_OnlineSearch( CMatchSessionOnlineSearch *pSession, KeyValues *pSettings );
public: virtual void OnSearchEvent( KeyValues *pNotify ); virtual void OnSearchDone();
protected: CMatchSessionOnlineSearch *m_pSession; };
#endif
|