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.
160 lines
4.9 KiB
160 lines
4.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//============================================================================= |
|
|
|
#include "pch_serverbrowser.h" |
|
|
|
using namespace vgui; |
|
|
|
const float BROADCAST_LIST_TIMEOUT = 0.4f; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Constructor |
|
//----------------------------------------------------------------------------- |
|
CLanGames::CLanGames(vgui::Panel *parent, bool bAutoRefresh, const char *pCustomResFilename ) : |
|
CBaseGamesPage(parent, "LanGames", eLANServer, pCustomResFilename) |
|
{ |
|
m_iServerRefreshCount = 0; |
|
m_bRequesting = false; |
|
m_bAutoRefresh = bAutoRefresh; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Destructor |
|
//----------------------------------------------------------------------------- |
|
CLanGames::~CLanGames() |
|
{ |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Activates the page, starts refresh |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::OnPageShow() |
|
{ |
|
if ( m_bAutoRefresh ) |
|
StartRefresh(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Called every frame |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::OnTick() |
|
{ |
|
BaseClass::OnTick(); |
|
CheckRetryRequest(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: returns true if the game list supports the specified ui elements |
|
//----------------------------------------------------------------------------- |
|
bool CLanGames::SupportsItem(InterfaceItem_e item) |
|
{ |
|
switch (item) |
|
{ |
|
case FILTERS: |
|
return true; |
|
|
|
case GETNEWLIST: |
|
default: |
|
return false; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: starts the servers refreshing |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::StartRefresh() |
|
{ |
|
BaseClass::StartRefresh(); |
|
m_fRequestTime = Plat_FloatTime(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Control which button are visible. |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::ManualShowButtons( bool bShowConnect, bool bShowRefreshAll, bool bShowFilter ) |
|
{ |
|
m_pConnect->SetVisible( bShowConnect ); |
|
m_pRefreshAll->SetVisible( bShowRefreshAll ); |
|
m_pFilter->SetVisible( bShowFilter ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: stops current refresh/GetNewServerList() |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::StopRefresh() |
|
{ |
|
BaseClass::StopRefresh(); |
|
// clear update states |
|
m_bRequesting = false; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Check to see if we've finished looking for local servers |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::CheckRetryRequest() |
|
{ |
|
if (!m_bRequesting) |
|
return; |
|
|
|
double curtime = Plat_FloatTime(); |
|
if (curtime - m_fRequestTime <= BROADCAST_LIST_TIMEOUT) |
|
{ |
|
return; |
|
} |
|
|
|
// time has elapsed, finish up |
|
m_bRequesting = false; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: called when a server response has timed out, remove it |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::ServerFailedToRespond( HServerListRequest hReq, int iServer ) |
|
{ |
|
int iServerMap = m_mapServers.Find( iServer ); |
|
if ( iServerMap != m_mapServers.InvalidIndex() ) |
|
RemoveServer( m_mapServers[ iServerMap ] ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: called when the current refresh list is complete |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::RefreshComplete( NServerResponse response ) |
|
{ |
|
SetRefreshing( false ); |
|
m_pGameList->SortList(); |
|
m_iServerRefreshCount = 0; |
|
m_pGameList->SetEmptyListText("#ServerBrowser_NoLanServers"); |
|
SetEmptyListText(); |
|
|
|
BaseClass::RefreshComplete( response ); |
|
} |
|
|
|
void CLanGames::SetEmptyListText() |
|
{ |
|
m_pGameList->SetEmptyListText("#ServerBrowser_NoLanServers"); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: opens context menu (user right clicked on a server) |
|
//----------------------------------------------------------------------------- |
|
void CLanGames::OnOpenContextMenu(int row) |
|
{ |
|
int serverID = GetSelectedServerID(); |
|
|
|
if ( serverID == -1 ) |
|
return; |
|
|
|
// Activate context menu |
|
CServerContextMenu *menu = ServerBrowserDialog().GetContextMenu(GetActiveList()); |
|
menu->ShowMenu(this, serverID, true, true, true, false); |
|
} |
|
|
|
|