csgo-2018-source/matchmaking/mm_session_online_teamsearch.h
2021-07-24 21:11:47 -07:00

182 lines
4.4 KiB
C++

//===== 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