158 lines
3.2 KiB
C++
158 lines
3.2 KiB
C++
//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ======//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//===========================================================================//
|
|
|
|
#ifndef NETCONSOLE_H
|
|
#define NETCONSOLE_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#ifdef _GAMECONSOLE
|
|
#define SUPPORT_NET_CONSOLE 0
|
|
#else
|
|
#define SUPPORT_NET_CONSOLE 1
|
|
#endif
|
|
|
|
#if SUPPORT_NET_CONSOLE
|
|
#include "tier2/socketcreator.h"
|
|
|
|
|
|
|
|
#define MAX_NETCONSOLE_INPUT_LEN 2048
|
|
|
|
class CConnectedNetConsoleData
|
|
{
|
|
public:
|
|
SocketHandle_t m_hSocket;
|
|
int m_nCharsInCommandBuffer;
|
|
char m_pszInputCommandBuffer[MAX_NETCONSOLE_INPUT_LEN];
|
|
bool m_bAuthorized; // for password protection
|
|
bool m_bInputOnly; // if set, don't send spew to this netconsole
|
|
|
|
CConnectedNetConsoleData( SocketHandle_t hSocket = -1 )
|
|
{
|
|
m_nCharsInCommandBuffer = 0;
|
|
m_bAuthorized = false;
|
|
m_hSocket = hSocket;
|
|
m_bInputOnly = false;
|
|
}
|
|
};
|
|
|
|
|
|
class CNetConsoleMgr : public ISocketCreatorListener
|
|
{
|
|
CSocketCreator m_Socket;
|
|
char m_pPassword[256]; // if set
|
|
netadr_t m_Address;
|
|
bool m_bActive;
|
|
bool m_bPasswordProtected;
|
|
|
|
CConnectedNetConsoleData m_ParentConnection;
|
|
|
|
bool ShouldAcceptSocket( SocketHandle_t hSocket, const netadr_t &netAdr )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void OnSocketAccepted( SocketHandle_t hSocket, const netadr_t &netAdr, void** ppData )
|
|
{
|
|
CConnectedNetConsoleData *pData = new CConnectedNetConsoleData( hSocket );
|
|
if ( ! m_bPasswordProtected )
|
|
{
|
|
pData->m_bAuthorized = true; // no password, auto-auth
|
|
}
|
|
*ppData = pData;
|
|
}
|
|
|
|
void OnSocketClosed( SocketHandle_t hSocket, const netadr_t &netAdr, void* pData )
|
|
{
|
|
if ( pData )
|
|
delete (CConnectedNetConsoleData*)pData;
|
|
}
|
|
|
|
void Execute( CConnectedNetConsoleData *pData );
|
|
|
|
void HandleInputChars( char const *pChars, int nNumChars, CConnectedNetConsoleData *pData );
|
|
|
|
int NumConnectedSockets( void )
|
|
{
|
|
int nRet = m_Socket.GetAcceptedSocketCount();
|
|
if ( m_ParentConnection.m_hSocket != -1 )
|
|
{
|
|
++nRet;
|
|
}
|
|
return nRet;
|
|
}
|
|
|
|
CConnectedNetConsoleData *GetConnection( int nIdx )
|
|
{
|
|
if ( m_ParentConnection.m_hSocket != -1 )
|
|
{
|
|
if ( nIdx == 0 )
|
|
{
|
|
return &m_ParentConnection;
|
|
}
|
|
nIdx--;
|
|
}
|
|
|
|
CConnectedNetConsoleData *pData = ( CConnectedNetConsoleData * ) m_Socket.GetAcceptedSocketData( nIdx );
|
|
return pData;
|
|
}
|
|
|
|
void CloseConnection( int nIdx )
|
|
{
|
|
if ( m_ParentConnection.m_hSocket != -1 )
|
|
{
|
|
if ( nIdx == 0 )
|
|
{
|
|
return; // don't really close
|
|
}
|
|
nIdx--;
|
|
}
|
|
m_Socket.CloseAcceptedSocket( nIdx );
|
|
}
|
|
|
|
public:
|
|
void RunFrame( void );
|
|
|
|
void SendStringToNetConsoles( char const *pString );
|
|
|
|
CNetConsoleMgr( void ); // initialize from command line arguments
|
|
|
|
CNetConsoleMgr( int nPort ); // init from expicity port number
|
|
|
|
bool IsActive() const { return m_bActive; }
|
|
const netadr_t& GetAddress() const { return m_Address; }
|
|
};
|
|
|
|
|
|
extern CNetConsoleMgr *g_pNetConsoleMgr;
|
|
#endif // support_netconsole
|
|
|
|
|
|
FORCEINLINE void SendStringToNetConsoles( char const *pMsg )
|
|
{
|
|
#if SUPPORT_NET_CONSOLE
|
|
if ( g_pNetConsoleMgr )
|
|
g_pNetConsoleMgr->SendStringToNetConsoles( pMsg );
|
|
#endif
|
|
}
|
|
|
|
#if SUPPORT_NET_CONSOLE
|
|
void InitNetConsole( void );
|
|
#else
|
|
FORCEINLINE void InitNetConsole( void )
|
|
{
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
#endif // if NETCONSOLE
|