<?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 Hub Developer Team
* @license GNU GPL 3.0 or any newer version
* @link http://www.ship-simu.org
*
* @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
*/
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
-
// -------------------------- Hub activation --------------------------
// Activates the hub by doing some final preparation steps and setting
// the attribute $hubIsActive to true
- $nodeInstance->activateHub();
+ $nodeInstance->activateHub($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()) {
+ while (($nodeInstance->isHubActive()) && ($handlerInstance->hasTasksLeft())) {
+ // Handle all tasks here
+ $handlerInstance->handleTasks();
+
+ // Handle the listeners
+ // @TODO We may have to catch some exceptions here
+ //$nodeInstance->getListenerPoolInstance()->handleListenerPool();
} // 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('console_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_generate_hubid_filter'));
+ $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_generate_sessionid_filter'));
$controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_restore_nodelist_filter'));
$controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_init_queues_filter'));
$controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_extra_bootstrap_filter'));
+ $controllerInstance->addBootstrapFilter(ObjectFactory::createObjectByConfiguredName('hub_bootstrap_listener_pool_filter'));
+
+ // Add hub activation filters
+ $controllerInstance->addActivationFilter(ObjectFactory::createObjectByConfiguredName('hub_activation_task_handler_initializer_filter'));
+
+ // Add shutdown filters
+ $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('hub_shutdown_flush_node_list_filter'));
+ $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('hub_shutdown_deinit_queues_filter'));
+ $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('hub_shutdown_listener_pool_filter'));
+
+ // This is the last generic filter
+ $controllerInstance->addShutdownFilter(ObjectFactory::createObjectByConfiguredName('hub_shutdown_node_filter'));
}
}