source-engine/serverbrowser/DialogGameInfo.h
FluorescentCIAAfricanAmerican 3bf9df6b27 1
2020-04-22 12:56:21 -04:00

127 lines
3.9 KiB
C++

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