|
|
//===== Copyright � 1996-2009, Valve Corporation, All rights reserved. ======//
//
// Purpose:
//
//===========================================================================//
#ifndef MM_SESSION_ONLINE_TEAM_SEARCH_H
#define MM_SESSION_ONLINE_TEAM_SEARCH_H
#ifdef _WIN32
#pragma once
#endif
class CMatchSessionOnlineTeamSearch; class CMatchSessionOnlineTeamSearchLinkHost; class CMatchSessionOnlineTeamSearchLinkClient;
//
// CMatchSessionOnlineTeamSearch
//
// Implementation of an online team session search (aka team-on-team matchmaking)
//
class CMatchSessionOnlineTeamSearch : public CMatchSessionOnlineSearch { public: explicit CMatchSessionOnlineTeamSearch( KeyValues *pSettings, CMatchSessionOnlineHost *pHost ); virtual ~CMatchSessionOnlineTeamSearch();
//
// Overrides when search is used as a nested object
//
protected: virtual CMatchSearcher * OnStartSearching(); virtual void OnSearchCompletedSuccess( CSysSessionClient *pSysSession, KeyValues *pSettings ); virtual void OnSearchCompletedEmpty( KeyValues *pSettings ); virtual void OnSearchEvent( KeyValues *pNotify ); virtual CSysSessionClient * OnBeginJoiningSearchResult();
// Hooks for the nested sys sessions
public: virtual void OnSessionEvent( KeyValues *pNotify ); CSysSessionBase * LinkSysSession();
//
// Match session overrides
//
public: // Run a frame update
virtual void Update();
// Destroy the session object
virtual void Destroy();
// Debug print a session object
virtual void DebugPrint();
// Process event
virtual void OnEvent( KeyValues *pEvent );
protected: void OnRunSessionCommand( KeyValues *pCommand );
CMatchSessionOnlineTeamSearchLinkHost & LinkHost(); CMatchSessionOnlineTeamSearchLinkClient & LinkClient();
void ResetAndRestartTeamSearch();
void RememberHostSessionUpdatePacket( KeyValues *pPacket ); void ApplyHostSessionUpdatePacket();
protected: enum State_t { STATE_SEARCHING, STATE_CREATING, STATE_AWAITING_PEER, STATE_LINK_HOST, STATE_LINK_CLIENT, STATE_ERROR, }; State_t m_eState; int m_iLinkState; XUID m_xuidLinkPeer;
CMatchSessionOnlineHost *m_pHostSession; // parent object that contains our TeamSearch
CSysSessionHost *m_pSysSessionHost; // nested SysSessionHost object when we are hosting
CSysSessionClient *m_pSysSessionClient; // nested SysSessionClient object when we are peer
CDsSearcher *m_pDsSearcher; // for searching dedicated servers
float m_flActionTime; // time to perform action of the current state
KeyValues *m_pUpdateHostSessionPacket; // packet that should be applied to host session before the game commences
// this packet is the case of team sessions being reconciled and unknown settings resolved
KeyValues::AutoDelete m_autodelete_pUpdateHostSessionPacket;
// LINK HOST STATE
float m_flCreationTime; #ifdef _X360
CXlspConnection *m_pXlspConnection; CXlspConnectionCmdBatch *m_pXlspCommandBatch; #endif
};
class CMatchSessionOnlineTeamSearchLinkBase : public CMatchSessionOnlineTeamSearch { private: CMatchSessionOnlineTeamSearchLinkBase();
public: enum State_t { STATE_HOSTING_LISTEN_SERVER, STATE_WAITING_FOR_PEER_SERVER, STATE_SEARCHING_DEDICATED, STATE_LINK_FINISHED, STATE_LINK_BASE_LAST };
protected: void StartHostingListenServer(); void StartDedicatedServerSearch(); void StartWaitingForPeerServer();
void OnDedicatedSearchFinished();
public: void LinkCommand( KeyValues *pCommand ); void LinkUpdate(); };
class CMatchSessionOnlineTeamSearchLinkHost : public CMatchSessionOnlineTeamSearchLinkBase { private: CMatchSessionOnlineTeamSearchLinkHost();
public: enum State_t { STATE_LINK_INITIAL = STATE_LINK_BASE_LAST, STATE_SUBMIT_STATS, STATE_REPORTING_STATS, STATE_CONFIRM_JOIN, STATE_CONFIRM_JOIN_WAIT, };
public: void LinkInit(); void LinkCommand( KeyValues *pCommand ); void LinkUpdate(); };
class CMatchSessionOnlineTeamSearchLinkClient : public CMatchSessionOnlineTeamSearchLinkBase { private: CMatchSessionOnlineTeamSearchLinkClient();
public: enum State_t { STATE_LINK_INITIAL = STATE_LINK_BASE_LAST, STATE_WAITING_FOR_HOST_READY, STATE_CONFIRM_JOIN, };
public: void LinkInit(); void LinkCommand( KeyValues *pCommand ); void LinkUpdate(); };
class CMatchSearcher_OnlineTeamSearch : public CMatchSearcher_OnlineSearch { public: CMatchSearcher_OnlineTeamSearch( CMatchSessionOnlineTeamSearch *pSession, KeyValues *pSettings );
protected: virtual void StartSearchPass( KeyValues *pSearchPass ); };
#endif
|