198 lines
6.5 KiB
C++
198 lines
6.5 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================
|
|
|
|
#include "AdminServer.h"
|
|
#include "IRunGameEngine.h"
|
|
#include "IGameServerData.h"
|
|
#include "GamePanelInfo.h"
|
|
#include "ivprofexport.h"
|
|
|
|
#include <vgui/ISystem.h>
|
|
#include <vgui/IPanel.h>
|
|
#include <vgui/IVGui.h>
|
|
#include <vgui/ILocalize.h>
|
|
#include <KeyValues.h>
|
|
#include "filesystem.h"
|
|
|
|
// expose the server browser interfaces
|
|
CAdminServer g_AdminServerSingleton;
|
|
EXPOSE_SINGLE_INTERFACE_GLOBALVAR(CAdminServer, IAdminServer, ADMINSERVER_INTERFACE_VERSION, g_AdminServerSingleton);
|
|
EXPOSE_SINGLE_INTERFACE_GLOBALVAR(CAdminServer, IVGuiModule, "VGuiModuleAdminServer001", g_AdminServerSingleton);
|
|
|
|
IGameServerData *g_pGameServerData = NULL;
|
|
IVProfExport *g_pVProfExport = NULL;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Constructor
|
|
//-----------------------------------------------------------------------------
|
|
CAdminServer::CAdminServer()
|
|
{
|
|
// fill in the 0-based element of the manage servers list
|
|
OpenedManageDialog_t empty = { 0, NULL };
|
|
m_OpenedManageDialog.AddToTail(empty);
|
|
m_hParent=0;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Destructor
|
|
//-----------------------------------------------------------------------------
|
|
CAdminServer::~CAdminServer()
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: links to vgui and engine interfaces
|
|
//-----------------------------------------------------------------------------
|
|
bool CAdminServer::Initialize(CreateInterfaceFn *factorylist, int factoryCount)
|
|
{
|
|
ConnectTier1Libraries( factorylist, factoryCount );
|
|
ConVar_Register();
|
|
ConnectTier2Libraries( factorylist, factoryCount );
|
|
ConnectTier3Libraries( factorylist, factoryCount );
|
|
|
|
// find our interfaces
|
|
for (int i = 0; i < factoryCount; i++)
|
|
{
|
|
// if we're running locally we can get this direct interface to the game engine
|
|
if (!g_pGameServerData)
|
|
{
|
|
g_pGameServerData = (IGameServerData *)(factorylist[i])(GAMESERVERDATA_INTERFACE_VERSION, NULL);
|
|
}
|
|
if ( !g_pVProfExport )
|
|
{
|
|
g_pVProfExport = (IVProfExport*)(factorylist[i])( VPROF_EXPORT_INTERFACE_VERSION, NULL );
|
|
}
|
|
}
|
|
|
|
RemoteServer().Initialize(); // now we have the game date interface, initialize the engine connection
|
|
|
|
if ( vgui::VGui_InitInterfacesList("AdminServer", factorylist, factoryCount) )
|
|
{
|
|
// load localization file
|
|
g_pVGuiLocalize->AddFile( "admin/admin_%language%.txt");
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: links to other modules interfaces (tracker)
|
|
//-----------------------------------------------------------------------------
|
|
bool CAdminServer::PostInitialize(CreateInterfaceFn *modules, int factoryCount)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
bool CAdminServer::IsValid()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
bool CAdminServer::Activate()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: returns direct handle to main server browser dialog
|
|
//-----------------------------------------------------------------------------
|
|
vgui::VPANEL CAdminServer::GetPanel()
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Closes down the server browser for good
|
|
//-----------------------------------------------------------------------------
|
|
void CAdminServer::Shutdown()
|
|
{
|
|
DisconnectTier3Libraries();
|
|
DisconnectTier2Libraries();
|
|
ConVar_Unregister();
|
|
DisconnectTier1Libraries();
|
|
}
|
|
|
|
void CAdminServer::SetParent(vgui::VPANEL parent)
|
|
{
|
|
/* if (m_hServerPage.Get())
|
|
{
|
|
m_hServerPage->SetParent(parent);
|
|
}
|
|
*/
|
|
m_hParent = parent;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Called when the user enters the game
|
|
//-----------------------------------------------------------------------------
|
|
void CAdminServer::Deactivate()
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Called when the user returns from the game to the outside UI
|
|
//-----------------------------------------------------------------------------
|
|
void CAdminServer::Reactivate()
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: opens a manage server dialog for a local server
|
|
//-----------------------------------------------------------------------------
|
|
ManageServerUIHandle_t CAdminServer::OpenManageServerDialog(const char *serverName, const char *gameDir)
|
|
{
|
|
CGamePanelInfo *tmp = new CGamePanelInfo(NULL, serverName, gameDir);
|
|
tmp->SetParent(m_hParent);
|
|
|
|
// add a new item into the list
|
|
int i = m_OpenedManageDialog.AddToTail();
|
|
m_OpenedManageDialog[i].handle = vgui::ivgui()->PanelToHandle(tmp->GetVPanel());
|
|
m_OpenedManageDialog[i].manageInterface = tmp;
|
|
|
|
return (ManageServerUIHandle_t)i;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: opens a manage server dialog to a remote server
|
|
//-----------------------------------------------------------------------------
|
|
ManageServerUIHandle_t CAdminServer::OpenManageServerDialog(unsigned int gameIP, unsigned int gamePort, const char *password)
|
|
{
|
|
Assert(false);
|
|
return (ManageServerUIHandle_t)0;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: forces the game info dialog closed
|
|
//-----------------------------------------------------------------------------
|
|
void CAdminServer::CloseManageServerDialog(ManageServerUIHandle_t gameDialog)
|
|
{
|
|
Assert(false);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Gets a handle to the management interface
|
|
//-----------------------------------------------------------------------------
|
|
IManageServer *CAdminServer::GetManageServerInterface(ManageServerUIHandle_t handle)
|
|
{
|
|
// make sure it's safe
|
|
if ((int)handle < 1 || (int)handle > m_OpenedManageDialog.Count())
|
|
return NULL;
|
|
|
|
vgui::VPANEL panel = vgui::ivgui()->HandleToPanel(m_OpenedManageDialog[handle].handle);
|
|
if (!panel)
|
|
return NULL;
|
|
|
|
return m_OpenedManageDialog[handle].manageInterface;
|
|
}
|