2016-01-10 11:01:49 +01:00
< ? php
/********************************
* LEGACY WORLDS - TICK MANAGER *
********************************/
/* Checks for fork() */
if ( ! ( function_exists ( 'pcntl_fork' ) || $__runFromAdmin )) {
die ( " This script may not be called from the web server. \n " );
}
/* If we're running from an administration script, go to the appropriate directory */
if ( $__runFromAdmin ) {
$oldDir = getcwd ();
chdir ( dirname ( __FILE__ ));
}
/* Load the required libraries */
$__logPrefix = " lwTicks " ;
$__loader = array (
'log' , 'classloader' ,
'version' , 'game' , 'tick' , 'config' ,
'db_connection' , 'db_accessor' , 'db_copy' , 'db' ,
'pcheck' , 'library' , 'tick_manager' ,
);
require_once ( " loader.inc " );
if ( $__runFromAdmin ) {
/* If we ' re being executed from an administration script ,
* we need to manually run a tick on a game .
*/
list ( $gName , $tName ) = $__adminParams ;
l :: setSyslogPrefix ( " lwControl " );
function __adminFatalError ( $errno , $errorText , $information ) {
foreach ( $information as $it ) {
$errorText .= " <br/> $it " ;
}
$bt = debug_backtrace ();
array_shift ( $bt ); // Remove this function
array_shift ( $bt ); // Remove eval in lib/log.inc
$errorText .= " <br/><u>Backtrace to the error:</u><pre> " ;
$base = dirname ( config :: $main [ 'scriptdir' ]);
foreach ( $bt as $data ) {
$str = " ... " . str_repeat ( ' ' , strlen ( $data [ 'class' ]) > 30 ? 1 : ( 31 - strlen ( $data [ 'class' ])))
. $data [ 'class' ] . " :: " . $data [ 'function' ];
if ( ! is_null ( $data [ 'file' ])) {
$str .= str_repeat ( ' ' , strlen ( $data [ 'function' ]) > 25 ? 1 : ( 26 - strlen ( $data [ 'function' ])));
$fn = preg_replace ( " #^ $base /# " , " " , $data [ 'file' ]);
$str .= " (line { $data [ 'line' ] } , file ' $fn ') " ;
}
$errorText .= " $str\n " ;
}
$errorText .= " </pre> " ;
throw new Exception ( $errorText );
}
l :: setFatalHandler ( '__adminFatalError' );
2024-12-31 00:25:05 +01:00
$argh = null ;
2016-01-10 11:01:49 +01:00
try {
dbConnect ();
$game = config :: getGame ( $gName );
if ( is_null ( $game )) {
throw new Exception ( " Game ' $gName ' not found " );
}
l :: notice ( " administration script executing tick { $gName } :: { $tName } " );
$game -> getDBAccess ();
$game -> runTick ( $tName , true );
l :: notice ( " tick { $gName } :: { $tName } executed " );
dbClose ();
} catch ( Exception $e ) {
$argh = $e -> getMessage ();
}
chdir ( $oldDir );
return ;
} else {
l :: setSyslogPrefix ( " lwTicks " );
if ( count ( $argv ) > 1 ) {
/* Checks for command line arguments */
if ( $argv [ 1 ] == " -r " && count ( $argv ) == 4 ) {
$game = $argv [ 2 ];
$tick = $argv [ 3 ];
dbConnect ();
$game = config :: getGame ( $argv [ 2 ]);
if ( is_null ( $game )) {
die ( " Error: game { $argv [ 2 ] } not found " );
}
l :: notice ( " manually executing { $argv [ 2 ] } :: { $argv [ 3 ] } " );
$game -> getDBAccess ();
$game -> runTick ( $argv [ 3 ], true );
l :: notice ( " { $argv [ 2 ] } :: { $argv [ 3 ] } executed " );
dbClose ();
exit ( 0 );
} elseif ( $argv [ 1 ] != " -d " ) {
die ( " Syntax: { $argv [ 0 ] } \n \t -> to run as a daemon \n \t { $argv [ 0 ] } -d \n \t -> to run in debugging mode \n \t { $argv [ 0 ] } -r <game> <tick> \n \t -> to run a tick manually \n " );
}
} else {
/* Starts the main thread */
new tick_manager ( $argv [ 1 ] == " -d " );
}
}
?>