113 lines
3 KiB
PHP
113 lines
3 KiB
PHP
<?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');
|
|
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");
|
|
}
|
|
|
|
}
|
|
|
|
?>
|