1
This commit is contained in:
126
serverbrowser/DialogGameInfo.h
Normal file
126
serverbrowser/DialogGameInfo.h
Normal file
@ -0,0 +1,126 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================
|
||||
|
||||
#ifndef DIALOGGAMEINFO_H
|
||||
#define DIALOGGAMEINFO_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
struct challenge_s
|
||||
{
|
||||
netadr_t addr;
|
||||
int challenge;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Dialog for displaying information about a game server
|
||||
//-----------------------------------------------------------------------------
|
||||
class CDialogGameInfo : public vgui::Frame, public ISteamMatchmakingPlayersResponse, public ISteamMatchmakingPingResponse
|
||||
{
|
||||
DECLARE_CLASS_SIMPLE( CDialogGameInfo, vgui::Frame );
|
||||
|
||||
public:
|
||||
CDialogGameInfo(vgui::Panel *parent, int serverIP, int queryPort, unsigned short connectionPort, const char *pszConnectCode );
|
||||
~CDialogGameInfo();
|
||||
|
||||
void Run(const char *titleName);
|
||||
void ChangeGame(int serverIP, int queryPort, unsigned short connectionPort);
|
||||
void SetFriend( uint64 ulSteamIDFriend );
|
||||
uint64 GetAssociatedFriend();
|
||||
|
||||
// forces the dialog to attempt to connect to the server
|
||||
void Connect();
|
||||
|
||||
// implementation of IServerRefreshResponse interface
|
||||
// called when the server has successfully responded
|
||||
virtual void ServerResponded( gameserveritem_t &server );
|
||||
|
||||
// called when a server response has timed out
|
||||
virtual void ServerFailedToRespond();
|
||||
|
||||
// on individual player added
|
||||
virtual void AddPlayerToList(const char *playerName, int score, float timePlayedSeconds);
|
||||
virtual void PlayersFailedToRespond() {}
|
||||
virtual void PlayersRefreshComplete() { m_hPlayersQuery = HSERVERQUERY_INVALID; }
|
||||
|
||||
// called when the current refresh list is complete
|
||||
virtual void RefreshComplete( EMatchMakingServerResponse response );
|
||||
|
||||
// player list received
|
||||
virtual void ClearPlayerList();
|
||||
|
||||
//virtual void SendChallengeQuery( const netadr_t & to );
|
||||
virtual void SendPlayerQuery( uint32 unIP, uint16 usQueryPort );
|
||||
//virtual void InsertChallengeResponse( const netadr_t & to, int nChallenge );
|
||||
|
||||
protected:
|
||||
// message handlers
|
||||
MESSAGE_FUNC( OnConnect, "Connect" );
|
||||
MESSAGE_FUNC( OnRefresh, "Refresh" );
|
||||
MESSAGE_FUNC_PTR( OnButtonToggled, "ButtonToggled", panel );
|
||||
MESSAGE_FUNC_PTR( OnRadioButtonChecked, "RadioButtonChecked", panel )
|
||||
{
|
||||
OnButtonToggled( panel );
|
||||
}
|
||||
|
||||
// response from the get password dialog
|
||||
MESSAGE_FUNC_CHARPTR( OnJoinServerWithPassword, "JoinServerWithPassword", password );
|
||||
|
||||
MESSAGE_FUNC_INT_INT( OnConnectToGame, "ConnectedToGame", ip, port );
|
||||
|
||||
// vgui overrides
|
||||
virtual void OnTick();
|
||||
virtual void PerformLayout();
|
||||
|
||||
virtual void OnKeyCodePressed( vgui::KeyCode code );
|
||||
|
||||
private:
|
||||
STEAM_CALLBACK( CDialogGameInfo, OnPersonaStateChange, PersonaStateChange_t, m_CallbackPersonaStateChange );
|
||||
|
||||
long m_iRequestRetry; // time at which to retry the request
|
||||
static int PlayerTimeColumnSortFunc(vgui::ListPanel *pPanel, const vgui::ListPanelItem &p1, const vgui::ListPanelItem &p2);
|
||||
|
||||
// methods
|
||||
void RequestInfo();
|
||||
void ConnectToServer();
|
||||
void ShowAutoRetryOptions(bool state);
|
||||
void ConstructConnectArgs( char *pchOptions, int cchOptions, const gameserveritem_t &server );
|
||||
void ApplyConnectCommand( const gameserveritem_t &server );
|
||||
|
||||
vgui::Button *m_pConnectButton;
|
||||
vgui::Button *m_pCloseButton;
|
||||
vgui::Button *m_pRefreshButton;
|
||||
vgui::Label *m_pInfoLabel;
|
||||
vgui::ToggleButton *m_pAutoRetry;
|
||||
vgui::RadioButton *m_pAutoRetryAlert;
|
||||
vgui::RadioButton *m_pAutoRetryJoin;
|
||||
vgui::ListPanel *m_pPlayerList;
|
||||
|
||||
enum { PING_TIMES_MAX = 4 };
|
||||
|
||||
// true if we should try connect to the server when it refreshes
|
||||
bool m_bConnecting;
|
||||
|
||||
// password, if entered
|
||||
char m_szPassword[64];
|
||||
|
||||
// state
|
||||
bool m_bServerNotResponding;
|
||||
bool m_bServerFull;
|
||||
bool m_bShowAutoRetryToggle;
|
||||
bool m_bShowingExtendedOptions;
|
||||
uint64 m_SteamIDFriend;
|
||||
|
||||
CUtlString m_sConnectCode;
|
||||
gameserveritem_t m_Server;
|
||||
HServerQuery m_hPingQuery;
|
||||
HServerQuery m_hPlayersQuery;
|
||||
bool m_bPlayerListUpdatePending;
|
||||
};
|
||||
|
||||
#endif // DIALOGGAMEINFO_H
|
Reference in New Issue
Block a user