diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /dedicated_main | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'dedicated_main')
| -rw-r--r-- | dedicated_main/dedicated_main.rc | 73 | ||||
| -rw-r--r-- | dedicated_main/dedicated_main.vpc | 43 | ||||
| -rw-r--r-- | dedicated_main/main.cpp | 231 | ||||
| -rw-r--r-- | dedicated_main/resource.h | 23 |
4 files changed, 370 insertions, 0 deletions
diff --git a/dedicated_main/dedicated_main.rc b/dedicated_main/dedicated_main.rc new file mode 100644 index 0000000..1d9e839 --- /dev/null +++ b/dedicated_main/dedicated_main.rc @@ -0,0 +1,73 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_LAUNCHER ICON DISCARDABLE "..\\launcher\\res\\launcher.ico" +IDI_LAUNCHER2 ICON DISCARDABLE "..\\launcher\\res\\launcher.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/dedicated_main/dedicated_main.vpc b/dedicated_main/dedicated_main.vpc new file mode 100644 index 0000000..e0ede2c --- /dev/null +++ b/dedicated_main/dedicated_main.vpc @@ -0,0 +1,43 @@ +//----------------------------------------------------------------------------- +// DEDICATED_MAIN.VPC +// +// Project Script +//----------------------------------------------------------------------------- + +$Macro SRCDIR ".." +$Macro OUTBINDIR "$SRCDIR\..\game" +$Macro OUTBINNAME "srcds" [$WINDOWS||$X360] +$Macro OUTBINNAME "srcds_osx" [$OSXALL] +$Macro OUTBINNAME "srcds_linux" [$LINUXALL] + +$Include "$SRCDIR\vpc_scripts\source_exe_base.vpc" +$Include "$SRCDIR\tier0\tier0_exclude.vpc" +$Include "$SRCDIR\tier1\tier1_exclude.vpc" [$WINDOWS] +$Include "$SRCDIR\vstdlib\vstdlib_exclude.vpc" [$WINDOWS] + +$Configuration +{ + $Linker [$WINDOWS] + { + $AdditionalDependencies "$BASE Advapi32.lib" + $EnableLargeAddresses "Support Addresses Larger Than 2 Gigabytes (/LARGEADDRESSAWARE)" + $FixedBaseAddress "Generate a relocation section (/FIXED:NO)" + } +} + +$Project "Dedicated_main" +{ + $Folder "Source Files" + { + $File "main.cpp" + $File "$SRCDIR\common\SteamAppStartup.cpp" + $File "$SRCDIR\common\SteamAppStartup.h" + } + + $Folder "Resources" + { + $File "$SRCDIR\launcher\res\launcher.ico" + $File "dedicated_main.rc" + } + +} diff --git a/dedicated_main/main.cpp b/dedicated_main/main.cpp new file mode 100644 index 0000000..9c64d7a --- /dev/null +++ b/dedicated_main/main.cpp @@ -0,0 +1,231 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +//----------------------------------------------------------------------------- +// This is just a little redirection tool so I can get all the dlls in bin +//----------------------------------------------------------------------------- + +#ifdef _WIN32 +#include <windows.h> +#include <stdio.h> +#include <assert.h> +#include <direct.h> +#elif POSIX +#include <stdio.h> +#include <stdlib.h> +#include <dlfcn.h> +#include <string.h> +#include <limits.h> +#include <errno.h> +#include <unistd.h> +#define MAX_PATH PATH_MAX +#endif +#include "basetypes.h" + +#ifdef _WIN32 +typedef int (*DedicatedMain_t)( HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPSTR lpCmdLine, int nCmdShow ); +#elif POSIX +typedef int (*DedicatedMain_t)( int argc, char *argv[] ); + +#endif + +//----------------------------------------------------------------------------- +// Purpose: Return the directory where this .exe is running from +// Output : char +//----------------------------------------------------------------------------- + +static char *GetBaseDir( const char *pszBuffer ) +{ + static char basedir[ MAX_PATH ]; + char szBuffer[ MAX_PATH ]; + size_t j; + char *pBuffer = NULL; + + strcpy( szBuffer, pszBuffer ); + + pBuffer = strrchr( szBuffer,'\\' ); + if ( pBuffer ) + { + *(pBuffer+1) = '\0'; + } + + strcpy( basedir, szBuffer ); + + j = strlen( basedir ); + if (j > 0) + { + if ( ( basedir[ j-1 ] == '\\' ) || + ( basedir[ j-1 ] == '/' ) ) + { + basedir[ j-1 ] = 0; + } + } + + return basedir; +} + +#ifdef _WIN32 +int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) +{ + // Must add 'bin' to the path.... + char* pPath = getenv("PATH"); + + // Use the .EXE name to determine the root directory + char moduleName[ MAX_PATH ]; + char szBuffer[ 4096 ]; + if ( !GetModuleFileName( hInstance, moduleName, MAX_PATH ) ) + { + MessageBox( 0, "Failed calling GetModuleFileName", "Launcher Error", MB_OK ); + return 0; + } + + // Get the root directory the .exe is in + char* pRootDir = GetBaseDir( moduleName ); + +#ifdef _DEBUG + int len = +#endif + _snprintf( szBuffer, sizeof( szBuffer ) - 1, "PATH=%s\\bin\\;%s", pRootDir, pPath ); + szBuffer[ ARRAYSIZE(szBuffer) - 1 ] = 0; + assert( len < 4096 ); + _putenv( szBuffer ); + + HINSTANCE launcher = LoadLibrary("bin\\dedicated.dll"); // STEAM OK ... filesystem not mounted yet + if (!launcher) + { + char *pszError; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&pszError, 0, NULL); + + char szBuf[1024]; + _snprintf(szBuf, sizeof( szBuf ) - 1, "Failed to load the launcher DLL:\n\n%s", pszError); + szBuf[ ARRAYSIZE(szBuf) - 1 ] = 0; + MessageBox( 0, szBuf, "Launcher Error", MB_OK ); + + LocalFree(pszError); + return 0; + } + + DedicatedMain_t main = (DedicatedMain_t)GetProcAddress( launcher, "DedicatedMain" ); + return main( hInstance, hPrevInstance, lpCmdLine, nCmdShow ); +} + +#elif POSIX + +#if defined( LINUX ) + +#include <fcntl.h> + +static bool IsDebuggerPresent( int time ) +{ + // Need to get around the __wrap_open() stuff. Just find the open symbol + // directly and use it... + typedef int (open_func_t)( const char *pathname, int flags, mode_t mode ); + open_func_t *open_func = (open_func_t *)dlsym( RTLD_NEXT, "open" ); + + if ( open_func ) + { + for ( int i = 0; i < time; i++ ) + { + int tracerpid = -1; + + int fd = (*open_func)( "/proc/self/status", O_RDONLY, S_IRUSR ); + if (fd >= 0) + { + char buf[ 4096 ]; + static const char tracerpid_str[] = "TracerPid:"; + + const int len = read( fd, buf, sizeof(buf) - 1 ); + if ( len > 0 ) + { + buf[ len ] = 0; + + const char *str = strstr( buf, tracerpid_str ); + tracerpid = str ? atoi( str + sizeof( tracerpid_str ) ) : -1; + } + + close( fd ); + } + + if ( tracerpid > 0 ) + return true; + + sleep( 1 ); + } + } + + return false; +} + +static void WaitForDebuggerConnect( int argc, char *argv[], int time ) +{ + for ( int i = 1; i < argc; i++ ) + { + if ( strstr( argv[i], "-wait_for_debugger" ) ) + { + printf( "\nArg -wait_for_debugger found.\nWaiting %dsec for debugger...\n", time ); + printf( " pid = %d\n", getpid() ); + + if ( IsDebuggerPresent( time ) ) + printf("Debugger connected...\n\n"); + + break; + } + } +} + +#else + +static void WaitForDebuggerConnect( int argc, char *argv[], int time ) +{ +} + +#endif // !LINUX + +int main( int argc, char *argv[] ) +{ + // Must add 'bin' to the path.... + char* pPath = getenv("LD_LIBRARY_PATH"); + char szBuffer[4096]; + char cwd[ MAX_PATH ]; + if ( !getcwd( cwd, sizeof(cwd)) ) + { + printf( "getcwd failed (%s)", strerror(errno)); + } + + snprintf( szBuffer, sizeof( szBuffer ) - 1, "LD_LIBRARY_PATH=%s/bin:%s", cwd, pPath ); + int ret = putenv( szBuffer ); + if ( ret ) + { + printf( "%s\n", strerror(errno) ); + } + void *tier0 = dlopen( "libtier0" DLL_EXT_STRING, RTLD_NOW ); + void *vstdlib = dlopen( "libvstdlib" DLL_EXT_STRING, RTLD_NOW ); + + const char *pBinaryName = "dedicated" DLL_EXT_STRING; + + void *dedicated = dlopen( pBinaryName, RTLD_NOW ); + if ( !dedicated ) + { + printf( "Failed to open %s (%s)\n", pBinaryName, dlerror()); + return -1; + } + DedicatedMain_t dedicated_main = (DedicatedMain_t)dlsym( dedicated, "DedicatedMain" ); + if ( !dedicated_main ) + { + printf( "Failed to find dedicated server entry point (%s)\n", dlerror() ); + return -1; + } + + WaitForDebuggerConnect( argc, argv, 30 ); + + ret = dedicated_main( argc,argv ); + dlclose( dedicated ); + dlclose( vstdlib ); + dlclose( tier0 ); +} +#endif diff --git a/dedicated_main/resource.h b/dedicated_main/resource.h new file mode 100644 index 0000000..5bd4d93 --- /dev/null +++ b/dedicated_main/resource.h @@ -0,0 +1,23 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by launcher_main.rc +// +#define IDI_LAUNCHER 128 +#define IDI_LAUNCHER2 101 +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif |