<?php
/**
- * A command for 'main'
+ * A command for the 'main' routine
*
* @author Roland Haeder <webmaster@ship-simu.org>
* @version 0.0.0
- * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Hub Developer Team
* @license GNU GPL 3.0 or any newer version
* @link http://www.ship-simu.org
*
* @param $resolverInstance An instance of a command resolver class
* @return $commandInstance An instance a prepared command class
*/
- public final static function createHubConsoleMainCommand (CommandResolver $resolverInstance) {
+ public static final function createHubConsoleMainCommand (CommandResolver $resolverInstance) {
// Get new instance
$commandInstance = new HubConsoleMainCommand();
* @param $requestInstance An instance of a class with an Requestable interface
* @param $responseInstance An instance of a class with an Responseable interface
* @return void
- * @throws NullPointerException When $applicationInstance is null
- * @throws InvalidInterfaceException When $applicationInstance does not implement ManageableApplication
- * @todo ~10% done
+ * @todo Try to create a HubActivationTask or so
*/
public function execute (Requestable $requestInstance, Responseable $responseInstance) {
// Get a registry and the application instance from it
$applicationInstance = Registry::getRegistry()->getInstance('app');
- // Is this a ManageableApplication instance?
- if (is_null($applicationInstance)) {
- // Something really bad went wrong
- throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
- } elseif (!$applicationInstance instanceof ManageableApplication) {
- // Something went badly wrong
- throw new InvalidInterfaceException(array($this, 'ManageableApplication'), self::EXCEPTION_REQUIRED_INTERFACE_MISSING);
- } // END - if
-
// ----------------------- Bootstrapping phase ------------------------
// Try to bootstrap the node and pass the request instance to it for
// extra arguments which mostly override config entries or enable special
// Get node instance
$nodeInstance = Registry::getRegistry()->getInstance('node');
- // Sanity-check on it
- if (is_null($nodeInstance)) {
- // Throws a NullPointerException here
- throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
- } // END - if
+ // Add some node-specific filters, e.g. announcement
+ $nodeInstance->addExtraNodeFilters();
// -------------------------- Hub activation --------------------------
// Activates the hub by doing some final preparation steps and setting
// the attribute $hubIsActive to true
- $nodeInstance->activateHub();
+ $nodeInstance->activateNode($requestInstance, $responseInstance);
+
+ // Get task handler instance
+ $handlerInstance = Registry::getRegistry()->getInstance('task');
+
+ // Debug message
+ $this->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.
- while ($nodeInstance->isHubActive()) {
+ // until the hub is no longer active or all tasks are killed.
+ while (($nodeInstance->getIsActive()) && ($handlerInstance->hasTasksLeft())) {
+ // Handle all tasks here
+ $handlerInstance->handleTasks();
} // END - while
+
+ // Debug message
+ $this->debugOutput('MAIN: --- Leaving main loop. ---');
}
/**
* @param $controllerInstance A controller instance
* @param $requestInstance An instance of a class with an Requestable interface
* @return void
+ * @todo Should we add some more filters?
*/
public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) {
// Add pre filters
+ $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('node_php_requirements_filter'));
$controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('node_initializer_filter'));
- $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('console_welcome_teaser_filter'));
+ $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('node_welcome_teaser_filter'));
// Add bootstrap filters
- $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_aquire_hubid_filter'));
- $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_gen_sessionid_filter'));
- $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_restore_nodelist_filter'));
- $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_init_queues_filter'));
+ $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('node_bootstrap_generate_nodeid_filter'));
+ $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('node_bootstrap_generate_sessionid_filter'));
+ $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('node_bootstrap_restore_nodelist_filter'));
+ $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('node_bootstrap_init_queues_filter'));
+ $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('node_bootstrap_extra_bootstrap_filter'));
+ $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('node_bootstrap_listener_pool_filter'));
+
+ // Add hub activation filters
+ $controllerInstance->addActivationFilter(ObjectFactory::createObjectByConfiguredName('node_activation_task_handler_initializer_filter'));
+
+ // Add shutdown filters
+ $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('node_shutdown_flush_node_list_filter'));
+ $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('node_shutdown_deinit_queues_filter'));
+ $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('node_shutdown_task_handler_filter'));
+
+ // This is the last generic filter
+ $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('node_shutdown_node_filter'));
}
}