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.
126 lines
3.9 KiB
126 lines
3.9 KiB
//========= 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
|
|
|