mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2024-11-10 06:31:47 +00:00
(#4925) - com_pipefile to create a named pipe for sending commands from other processes, patch by Chris Schwarz
This commit is contained in:
parent
a3def2744f
commit
3bf8ec2dab
6 changed files with 122 additions and 0 deletions
4
README
4
README
|
@ -158,6 +158,10 @@ New cvars
|
||||||
com_maxfpsMinimized - Maximum frames per second when minimized
|
com_maxfpsMinimized - Maximum frames per second when minimized
|
||||||
com_busyWait - Will use a busy loop to wait for rendering
|
com_busyWait - Will use a busy loop to wait for rendering
|
||||||
next frame when set to non-zero value
|
next frame when set to non-zero value
|
||||||
|
com_pipefile - Specify filename to create a named pipe
|
||||||
|
through which other processes can control
|
||||||
|
the server while it is running.
|
||||||
|
Nonfunctional on Windows.
|
||||||
|
|
||||||
in_joystickNo - select which joystick to use
|
in_joystickNo - select which joystick to use
|
||||||
in_availableJoysticks - list of available Joysticks
|
in_availableJoysticks - list of available Joysticks
|
||||||
|
|
|
@ -50,6 +50,7 @@ jmp_buf abortframe; // an ERR_DROP occured, exit the entire frame
|
||||||
|
|
||||||
|
|
||||||
FILE *debuglogfile;
|
FILE *debuglogfile;
|
||||||
|
static fileHandle_t pipefile;
|
||||||
static fileHandle_t logfile;
|
static fileHandle_t logfile;
|
||||||
fileHandle_t com_journalFile; // events are written here
|
fileHandle_t com_journalFile; // events are written here
|
||||||
fileHandle_t com_journalDataFile; // config files are written here
|
fileHandle_t com_journalDataFile; // config files are written here
|
||||||
|
@ -66,6 +67,7 @@ cvar_t *com_timedemo;
|
||||||
cvar_t *com_sv_running;
|
cvar_t *com_sv_running;
|
||||||
cvar_t *com_cl_running;
|
cvar_t *com_cl_running;
|
||||||
cvar_t *com_logfile; // 1 = buffer log, 2 = flush after each print
|
cvar_t *com_logfile; // 1 = buffer log, 2 = flush after each print
|
||||||
|
cvar_t *com_pipefile;
|
||||||
cvar_t *com_showtrace;
|
cvar_t *com_showtrace;
|
||||||
cvar_t *com_version;
|
cvar_t *com_version;
|
||||||
cvar_t *com_blood;
|
cvar_t *com_blood;
|
||||||
|
@ -2768,9 +2770,36 @@ void Com_Init( char *commandLine ) {
|
||||||
Com_Printf ("Altivec support is %s\n", com_altivec->integer ? "enabled" : "disabled");
|
Com_Printf ("Altivec support is %s\n", com_altivec->integer ? "enabled" : "disabled");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
com_pipefile = Cvar_Get( "com_pipefile", "", CVAR_ARCHIVE|CVAR_LATCH );
|
||||||
|
if( com_pipefile->string[0] )
|
||||||
|
{
|
||||||
|
pipefile = FS_FCreateOpenPipeFile( com_pipefile->string );
|
||||||
|
}
|
||||||
|
|
||||||
Com_Printf ("--- Common Initialization Complete ---\n");
|
Com_Printf ("--- Common Initialization Complete ---\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===============
|
||||||
|
Com_ReadFromPipe
|
||||||
|
|
||||||
|
Read whatever is in com_pipefile, if anything, and execute it
|
||||||
|
===============
|
||||||
|
*/
|
||||||
|
void Com_ReadFromPipe( void )
|
||||||
|
{
|
||||||
|
char buffer[MAX_STRING_CHARS] = {""};
|
||||||
|
qboolean read;
|
||||||
|
|
||||||
|
if( !pipefile )
|
||||||
|
return;
|
||||||
|
|
||||||
|
read = FS_Read( buffer, sizeof( buffer ), pipefile );
|
||||||
|
if( read )
|
||||||
|
Cbuf_ExecuteText( EXEC_APPEND, buffer );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//==================================================================
|
//==================================================================
|
||||||
|
|
||||||
void Com_WriteConfigToFile( const char *filename ) {
|
void Com_WriteConfigToFile( const char *filename ) {
|
||||||
|
@ -3097,6 +3126,8 @@ void Com_Frame( void ) {
|
||||||
c_pointcontents = 0;
|
c_pointcontents = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Com_ReadFromPipe( );
|
||||||
|
|
||||||
com_frameNumber++;
|
com_frameNumber++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3116,6 +3147,11 @@ void Com_Shutdown (void) {
|
||||||
com_journalFile = 0;
|
com_journalFile = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( pipefile ) {
|
||||||
|
FS_FCloseFile( pipefile );
|
||||||
|
FS_HomeRemove( com_pipefile->string );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
|
|
|
@ -905,6 +905,50 @@ fileHandle_t FS_FOpenFileAppend( const char *filename ) {
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===========
|
||||||
|
FS_FCreateOpenPipeFile
|
||||||
|
|
||||||
|
===========
|
||||||
|
*/
|
||||||
|
fileHandle_t FS_FCreateOpenPipeFile( const char *filename ) {
|
||||||
|
char *ospath;
|
||||||
|
FILE *fifo;
|
||||||
|
fileHandle_t f;
|
||||||
|
|
||||||
|
if ( !fs_searchpaths ) {
|
||||||
|
Com_Error( ERR_FATAL, "Filesystem call made without initialization\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
f = FS_HandleForFile();
|
||||||
|
fsh[f].zipFile = qfalse;
|
||||||
|
|
||||||
|
Q_strncpyz( fsh[f].name, filename, sizeof( fsh[f].name ) );
|
||||||
|
|
||||||
|
// don't let sound stutter
|
||||||
|
S_ClearSoundBuffer();
|
||||||
|
|
||||||
|
ospath = FS_BuildOSPath( fs_homepath->string, fs_gamedir, filename );
|
||||||
|
|
||||||
|
if ( fs_debug->integer ) {
|
||||||
|
Com_Printf( "FS_FCreateOpenPipeFile: %s\n", ospath );
|
||||||
|
}
|
||||||
|
|
||||||
|
FS_CheckFilenameIsNotExecutable( ospath, __func__ );
|
||||||
|
|
||||||
|
fifo = Sys_Mkfifo( ospath );
|
||||||
|
if( fifo ) {
|
||||||
|
fsh[f].handleFiles.file.o = fifo;
|
||||||
|
fsh[f].handleSync = qfalse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
f = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===========
|
===========
|
||||||
FS_FilenameCompare
|
FS_FilenameCompare
|
||||||
|
|
|
@ -626,6 +626,7 @@ int FS_GetModList( char *listbuf, int bufsize );
|
||||||
|
|
||||||
fileHandle_t FS_FOpenFileWrite( const char *qpath );
|
fileHandle_t FS_FOpenFileWrite( const char *qpath );
|
||||||
fileHandle_t FS_FOpenFileAppend( const char *filename );
|
fileHandle_t FS_FOpenFileAppend( const char *filename );
|
||||||
|
fileHandle_t FS_FCreateOpenPipeFile( const char *filename );
|
||||||
// will properly create any needed paths and deal with seperater character issues
|
// will properly create any needed paths and deal with seperater character issues
|
||||||
|
|
||||||
fileHandle_t FS_SV_FOpenFileWrite( const char *filename );
|
fileHandle_t FS_SV_FOpenFileWrite( const char *filename );
|
||||||
|
@ -1094,6 +1095,7 @@ qboolean Sys_IsLANAddress (netadr_t adr);
|
||||||
void Sys_ShowIP(void);
|
void Sys_ShowIP(void);
|
||||||
|
|
||||||
qboolean Sys_Mkdir( const char *path );
|
qboolean Sys_Mkdir( const char *path );
|
||||||
|
FILE *Sys_Mkfifo( const char *ospath );
|
||||||
char *Sys_Cwd( void );
|
char *Sys_Cwd( void );
|
||||||
void Sys_SetDefaultInstallPath(const char *path);
|
void Sys_SetDefaultInstallPath(const char *path);
|
||||||
char *Sys_DefaultInstallPath(void);
|
char *Sys_DefaultInstallPath(void);
|
||||||
|
|
|
@ -247,6 +247,31 @@ qboolean Sys_Mkdir( const char *path )
|
||||||
return qtrue;
|
return qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
==================
|
||||||
|
Sys_Mkfifo
|
||||||
|
==================
|
||||||
|
*/
|
||||||
|
FILE *Sys_Mkfifo( const char *ospath )
|
||||||
|
{
|
||||||
|
FILE *fifo;
|
||||||
|
int result;
|
||||||
|
int fn;
|
||||||
|
|
||||||
|
result = mkfifo( ospath, 0600 );
|
||||||
|
if( result != 0 )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
fifo = fopen( ospath, "w+" );
|
||||||
|
if( fifo )
|
||||||
|
{
|
||||||
|
fn = fileno( fifo );
|
||||||
|
fcntl( fn, F_SETFL, O_NONBLOCK );
|
||||||
|
}
|
||||||
|
|
||||||
|
return fifo;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
Sys_Cwd
|
Sys_Cwd
|
||||||
|
|
|
@ -320,6 +320,17 @@ qboolean Sys_Mkdir( const char *path )
|
||||||
return qtrue;
|
return qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
==================
|
||||||
|
Sys_Mkfifo
|
||||||
|
Noop on windows because named pipes do not function the same way
|
||||||
|
==================
|
||||||
|
*/
|
||||||
|
FILE *Sys_Mkfifo( const char *ospath )
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==============
|
==============
|
||||||
Sys_Cwd
|
Sys_Cwd
|
||||||
|
|
Loading…
Reference in a new issue