You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.1 KiB
116 lines
3.1 KiB
//===== Copyright © 1996-2009, Valve Corporation, All rights reserved. ======//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//===========================================================================//
|
|
|
|
#ifndef MM_SESSION_ONLINE_HOST_H
|
|
#define MM_SESSION_ONLINE_HOST_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
class CMatchSessionOnlineTeamSearch;
|
|
class CMatchSessionOnlineSearch;
|
|
|
|
//
|
|
// CMatchSessionOnlineHost
|
|
//
|
|
// Implementation of an online session of a host machine
|
|
//
|
|
|
|
class CMatchSessionOnlineHost : public IMatchSessionInternal
|
|
{
|
|
// Methods of IMatchSession
|
|
public:
|
|
// Get an internal pointer to session system-specific data
|
|
virtual KeyValues * GetSessionSystemData();
|
|
|
|
// 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 );
|
|
|
|
// Process event
|
|
virtual void OnEvent( KeyValues *pEvent );
|
|
|
|
public:
|
|
explicit CMatchSessionOnlineHost( KeyValues *pSettings );
|
|
explicit CMatchSessionOnlineHost( CSysSessionClient *pSysSession, KeyValues *pExtendedSettings );
|
|
~CMatchSessionOnlineHost();
|
|
|
|
protected:
|
|
void InitializeGameSettings();
|
|
void MigrateGameSettings();
|
|
|
|
void OnRunCommand( KeyValues *pCommand );
|
|
void OnRunCommand_Start();
|
|
void OnRunCommand_StartDsSearchFinished();
|
|
void OnRunCommand_StartListenServerStarted( uint32 externalIP );
|
|
void OnRunCommand_Cancel_DsSearch();
|
|
void OnRunCommand_Match();
|
|
void OnRunCommand_QueueConnect( KeyValues *pCommand );
|
|
void OnRunCommand_Cancel_Match();
|
|
void ConnectGameServer( CDsSearcher::DsResult_t *pDsResult );
|
|
void StartListenServerMap();
|
|
void OnEndGameToLobby();
|
|
void SetSessionActiveGameplayState( bool bActive, char const *szSecureServerAddress );
|
|
void InviteTeam();
|
|
|
|
//
|
|
// Overrides
|
|
//
|
|
protected:
|
|
virtual void OnGamePrepareLobbyForGame();
|
|
virtual void OnGamePlayerMachinesConnected( int numMachines );
|
|
|
|
protected:
|
|
KeyValues *m_pSettings;
|
|
KeyValues::AutoDelete m_autodelete_pSettings;
|
|
|
|
KeyValues *m_pSysData;
|
|
KeyValues::AutoDelete m_autodelete_pSysData;
|
|
|
|
enum State_t
|
|
{
|
|
STATE_INIT,
|
|
STATE_CREATING,
|
|
STATE_LOBBY,
|
|
STATE_MATCHING, // host is running matchmaking for opponents
|
|
STATE_MATCHINGRESTART, // team communication failed and matching needs to restart
|
|
STATE_STARTING, // host is running a dedicated search or other things before actual game server kicks in
|
|
STATE_LOADING, // host is starting a server map
|
|
STATE_GAME,
|
|
STATE_ENDING,
|
|
STATE_MIGRATE
|
|
};
|
|
State_t m_eState;
|
|
|
|
CSysSessionHost *m_pSysSession;
|
|
CDsSearcher *m_pDsSearcher;
|
|
CMatchSessionOnlineTeamSearch *m_pTeamSearcher;
|
|
CMatchSessionOnlineSearch *m_pMatchSearcher;
|
|
};
|
|
|
|
#endif
|