summaryrefslogtreecommitdiff
path: root/serverbrowser/DialogGameInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'serverbrowser/DialogGameInfo.h')
-rw-r--r--serverbrowser/DialogGameInfo.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/serverbrowser/DialogGameInfo.h b/serverbrowser/DialogGameInfo.h
new file mode 100644
index 0000000..586c1c4
--- /dev/null
+++ b/serverbrowser/DialogGameInfo.h
@@ -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