From: Roland Haeder Date: Sun, 5 Apr 2015 14:41:57 +0000 (+0200) Subject: The console part of the game will become a daemon that is taking care of all X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=1dfd279547e8a4c1521205bc8ed19831b8741455;p=city.git The console part of the game will become a daemon that is taking care of all the "heavy work", like calculations of citizen happiness, land value and city growth (and many more). So the HTML client (and later AJAX) will only have to display the data and not do any heavy work (as this takes to long). Signed-off-by: Roland Haeder --- diff --git a/application/city/config.php b/application/city/config.php index 8a6298e..580273e 100644 --- a/application/city/config.php +++ b/application/city/config.php @@ -73,10 +73,10 @@ $cfg->setConfigEntry('menu_template_extension', '.xml'); ******************************************************************************/ // CFG: DEFAULT-CITY-CONSOLE-COMMAND -$cfg->setConfigEntry('default_city_console_command', 'main'); +$cfg->setConfigEntry('default_city_console_command', 'daemon'); -// CFG: CITY-CONSOLE-CMD-MAIN-RESOLVER-CLASS -$cfg->setConfigEntry('city_console_cmd_main_resolver_class', 'CityConsoleCommandResolver'); +// CFG: CITY-CONSOLE-CMD-DAEMON-RESOLVER-CLASS +$cfg->setConfigEntry('city_console_cmd_daemon_resolver_class', 'CityConsoleCommandResolver'); // CFG: CITY-PHP-REQUIREMENTS-FILTER $cfg->setConfigEntry('city_php_requirements_filter', 'CityPhpRequirementsFilter'); @@ -96,8 +96,8 @@ $cfg->setConfigEntry('city_shutdown_task_handler_filter', 'CityShutdownTaskHandl // CFG: CITY-SHUTDOWN-CITY-FILTER $cfg->setConfigEntry('city_shutdown_city_filter', 'CityShutdownCityFilter'); -// CFG: NEWS-MAIN-LIMIT -$cfg->setConfigEntry('news_main_limit', 5); +// CFG: NEWS-DAEMON-LIMIT +$cfg->setConfigEntry('news_daemon_limit', 5); // [EOF] ?> diff --git a/application/city/main/city/class_BaseCity.php b/application/city/main/city/class_BaseCity.php index add017e..812d426 100644 --- a/application/city/main/city/class_BaseCity.php +++ b/application/city/main/city/class_BaseCity.php @@ -80,7 +80,7 @@ class BaseCity extends BaseCitySystem implements Updateable, AddableCriteria { // Output all lines self::createDebugInstance(__CLASS__)->debugOutput(' '); - self::createDebugInstance(__CLASS__)->debugOutput($app->getAppName() . ' v' . $app->getAppVersion() . ' - ' . $this->getRequestInstance()->getRequestElement('mode') . ' mode active'); + self::createDebugInstance(__CLASS__)->debugOutput($app->getAppName() . ' v' . $app->getAppVersion() . ' - ' . $this->getRequestInstance()->getRequestElement('mode') . ' daemon starting'); self::createDebugInstance(__CLASS__)->debugOutput('Copyright (c) 2015 City Developer Team'); self::createDebugInstance(__CLASS__)->debugOutput(' '); self::createDebugInstance(__CLASS__)->debugOutput('This program comes with ABSOLUTELY NO WARRANTY; for details see docs/COPYING.'); @@ -218,13 +218,13 @@ class BaseCity extends BaseCitySystem implements Updateable, AddableCriteria { * @param $CityData An array with valid City data * @return void */ - public function addArrayToDataSet (StoreableCriteria $dataSetInstance, array $CityData) { + public function addArrayToDataSet (StoreableCriteria $dataSetInstance, array $cityData) { // Add all data the array provides - foreach (CityDistributedHashTableDatabaseWrapper::getAllElements() as $element) { + foreach (CityInformationDatabaseWrapper::getAllElements() as $element) { // Is the element there? - if (isset($CityData[$element])) { + if (isset($cityData[$element])) { // Add it - $dataSetInstance->addCriteria($element, $CityData[$element]); + $dataSetInstance->addCriteria($element, $cityData[$element]); } else { // Output warning message /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('City[' . __METHOD__ . ':' . __LINE__ . ']: addArrayToDataSet(): Element ' . $element . ' not found in CityData array.'); diff --git a/application/city/main/commands/console/class_CityConsoleDaemonCommand.php b/application/city/main/commands/console/class_CityConsoleDaemonCommand.php new file mode 100644 index 0000000..53b0ea2 --- /dev/null +++ b/application/city/main/commands/console/class_CityConsoleDaemonCommand.php @@ -0,0 +1,137 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2015 City Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class CityConsoleDaemonCommand extends BaseCommand implements Commandable { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of this class + * + * @param $resolverInstance An instance of a command resolver class + * @return $commandInstance An instance a prepared command class + */ + public static final function createCityConsoleDaemonCommand (CommandResolver $resolverInstance) { + // Get new instance + $commandInstance = new CityConsoleDaemonCommand(); + + // Set the application instance + $commandInstance->setResolverInstance($resolverInstance); + + // Return the prepared instance + return $commandInstance; + } + + /** + * Executes the given command with given request and response objects + * + * @param $requestInstance An instance of a class with an Requestable interface + * @param $responseInstance An instance of a class with an Responseable interface + * @return void + * @todo ~10% done? + */ + public function execute (Requestable $requestInstance, Responseable $responseInstance) { + // Get a registry and the application instance from it + $applicationInstance = Registry::getRegistry()->getInstance('app'); + + /* + * ----------------------- Bootstrapping phase ------------------------ + * Try to bootstrap the city and pass the request instance to it for + * extra arguments which mostly override config entries or enable special + * features within the hub (none is ready at this development stage) + */ + self::createDebugInstance(__CLASS__)->debugOutput('BOOTSTRAP: Beginning with bootstrap...'); + $applicationInstance->getControllerInstance()->executeBootstrapFilters($requestInstance, $responseInstance); + self::createDebugInstance(__CLASS__)->debugOutput('BOOTSTRAP: Bootstrap finished.'); + + // Get city instance + $cityInstance = CityObjectFactory::createCityInstance(); + + // Add some city-specific filters, e.g. announcement + $cityInstance->addExtraCityFilters(); + + /* + * -------------------------- City activation -------------------------- + * Activates the city by doing some final preparation steps and setting + * the attribute $hubIsActive to TRUE. + */ + $cityInstance->activateCity($requestInstance, $responseInstance); + + // Get task handler instance + $handlerInstance = Registry::getRegistry()->getInstance('task_handler'); + + // Debug message + self::createDebugInstance(__CLASS__)->debugOutput('MAIN: --- Entering main loop. ---'); + + /* + * ----------------------------- Main loop ---------------------------- + * This is the main loop. Queried calls should come back here very fast + * so the whole application runs on nice speed. This while-loop goes + * until the hub is no longer active or all tasks are killed. + */ + while (($cityInstance->isCityActive()) && ($handlerInstance->hasTasksLeft())) { + // Handle all tasks here + $handlerInstance->handleTasks(); + } // END - while + + // Debug message + self::createDebugInstance(__CLASS__)->debugOutput('MAIN: --- Leaving main loop. ---'); + } + + /** + * Adds extra filters to the given controller instance + * + * @param $controllerInstance A controller instance + * @param $requestInstance An instance of a class with an Requestable interface + * @return void + * @todo 0% done + */ + public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) { + // Add pre filters + $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('city_php_requirements_filter')); + $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('city_initializer_filter')); + $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('city_welcome_teaser_filter')); + + // Add bootstrap filters + //$controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('city_bootstrap_generate_cityid_filter')); + + // Add city activation filters + $controllerInstance->addActivationFilter(ObjectFactory::createObjectByConfiguredName('city_activation_task_handler_initializer_filter')); + + // Add shutdown filters + $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('city_shutdown_task_handler_filter')); + + // This is the last generic shutdown filter + $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('city_shutdown_city_filter')); + } +} + +// [EOF] +?> diff --git a/application/city/main/commands/console/class_CityConsoleMainCommand.php b/application/city/main/commands/console/class_CityConsoleMainCommand.php deleted file mode 100644 index ea595f7..0000000 --- a/application/city/main/commands/console/class_CityConsoleMainCommand.php +++ /dev/null @@ -1,137 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2015 City Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.shipsimu.org - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -class CityConsoleMainCommand extends BaseCommand implements Commandable { - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates an instance of this class - * - * @param $resolverInstance An instance of a command resolver class - * @return $commandInstance An instance a prepared command class - */ - public static final function createCityConsoleMainCommand (CommandResolver $resolverInstance) { - // Get new instance - $commandInstance = new CityConsoleMainCommand(); - - // Set the application instance - $commandInstance->setResolverInstance($resolverInstance); - - // Return the prepared instance - return $commandInstance; - } - - /** - * Executes the given command with given request and response objects - * - * @param $requestInstance An instance of a class with an Requestable interface - * @param $responseInstance An instance of a class with an Responseable interface - * @return void - * @todo ~10% done? - */ - public function execute (Requestable $requestInstance, Responseable $responseInstance) { - // Get a registry and the application instance from it - $applicationInstance = Registry::getRegistry()->getInstance('app'); - - /* - * ----------------------- Bootstrapping phase ------------------------ - * Try to bootstrap the city and pass the request instance to it for - * extra arguments which mostly override config entries or enable special - * features within the hub (none is ready at this development stage) - */ - self::createDebugInstance(__CLASS__)->debugOutput('BOOTSTRAP: Beginning with bootstrap...'); - $applicationInstance->getControllerInstance()->executeBootstrapFilters($requestInstance, $responseInstance); - self::createDebugInstance(__CLASS__)->debugOutput('BOOTSTRAP: Bootstrap finished.'); - - // Get city instance - $cityInstance = CityObjectFactory::createCityInstance(); - - // Add some city-specific filters, e.g. announcement - $cityInstance->addExtraCityFilters(); - - /* - * -------------------------- City activation -------------------------- - * Activates the city by doing some final preparation steps and setting - * the attribute $hubIsActive to TRUE. - */ - $cityInstance->activateCity($requestInstance, $responseInstance); - - // Get task handler instance - $handlerInstance = Registry::getRegistry()->getInstance('task_handler'); - - // Debug message - self::createDebugInstance(__CLASS__)->debugOutput('MAIN: --- Entering main loop. ---'); - - /* - * ----------------------------- Main loop ---------------------------- - * This is the main loop. Queried calls should come back here very fast - * so the whole application runs on nice speed. This while-loop goes - * until the hub is no longer active or all tasks are killed. - */ - while (($cityInstance->isCityActive()) && ($handlerInstance->hasTasksLeft())) { - // Handle all tasks here - $handlerInstance->handleTasks(); - } // END - while - - // Debug message - self::createDebugInstance(__CLASS__)->debugOutput('MAIN: --- Leaving main loop. ---'); - } - - /** - * Adds extra filters to the given controller instance - * - * @param $controllerInstance A controller instance - * @param $requestInstance An instance of a class with an Requestable interface - * @return void - * @todo 0% done - */ - public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) { - // Add pre filters - $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('city_php_requirements_filter')); - $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('city_initializer_filter')); - $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('city_welcome_teaser_filter')); - - // Add bootstrap filters - //$controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('city_bootstrap_generate_cityid_filter')); - - // Add city activation filters - $controllerInstance->addActivationFilter(ObjectFactory::createObjectByConfiguredName('city_activation_task_handler_initializer_filter')); - - // Add shutdown filters - $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('city_shutdown_task_handler_filter')); - - // This is the last generic shutdown filter - $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('city_shutdown_city_filter')); - } -} - -// [EOF] -?>