mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-03 05:49:41 +03:00
1
This commit is contained in:
160
serverbrowser/LanGames.cpp
Normal file
160
serverbrowser/LanGames.cpp
Normal file
@@ -0,0 +1,160 @@
|
||||
//========= 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( HServerListRequest hReq, EMatchMakingServerResponse response )
|
||||
{
|
||||
SetRefreshing( false );
|
||||
m_pGameList->SortList();
|
||||
m_iServerRefreshCount = 0;
|
||||
m_pGameList->SetEmptyListText("#ServerBrowser_NoLanServers");
|
||||
SetEmptyListText();
|
||||
|
||||
BaseClass::RefreshComplete( hReq, 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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user