* @version 0.0.0 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2014 Hub 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 NodeTaskHandlerInitializerFilter extends BaseNodeFilter implements Filterable { /** * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); } /** * Creates an instance of this filter class * * @return $filterInstance An instance of this filter class */ public static final function createNodeTaskHandlerInitializerFilter () { // Get a new instance $filterInstance = new NodeTaskHandlerInitializerFilter(); // Return the instance return $filterInstance; } /** * Executes the filter 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 * @throws FilterChainException If the filter chain needs to be interrupted * @todo Maybe some more tasks needs to be added? */ public function execute (Requestable $requestInstance, Responseable $responseInstance) { // Get node instance $nodeInstance = NodeObjectFactory::createNodeInstance(); // Get a new task handler instance $handlerInstance = ObjectFactory::createObjectByConfiguredName('task_handler_class'); // Prepare a package-tags initialization task for the listeners $taskInstance = ObjectFactory::createObjectByConfiguredName('node_package_tags_init_task_class'); // Register it $handlerInstance->registerTask('package_tags_init', $taskInstance); // Generate package writer task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_package_writer_task_class'); // Register it as well $handlerInstance->registerTask('network_package_writer', $taskInstance); // Generate package reader task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_package_reader_task_class', array($nodeInstance->getListenerPoolInstance())); // Network package reader, needs to be delayed a little $handlerInstance->registerTask('network_package_reader', $taskInstance); // Generate socket listener task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_socket_listener_task_class'); // Network package reader, needs to be delayed a little $handlerInstance->registerTask('socket_listener', $taskInstance); // Generate package decoder task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_package_decoder_task_class'); // Register it as well $handlerInstance->registerTask('package_decoder', $taskInstance); // Generate chunk assembler task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_chunk_assembler_task_class'); // Register it as well $handlerInstance->registerTask('chunk_assembler', $taskInstance); // Generate DHT initialization task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_dht_init_task_class'); // Register it as well $handlerInstance->registerTask('dht_init', $taskInstance); // Generate DHT query task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_dht_query_task_class'); // Register it as well $handlerInstance->registerTask('dht_query', $taskInstance); // Generate DHT publication-check task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_dht_publication_check_task_class'); // Register it as well $handlerInstance->registerTask('dht_check_publication', $taskInstance); // Generate DHT publication task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_dht_publication_task_class'); // Register it as well $handlerInstance->registerTask('dht_publication', $taskInstance); // Prepare a self-test task for the listeners $taskInstance = ObjectFactory::createObjectByConfiguredName('node_selfconnect_task_class'); // Register it $handlerInstance->registerTask('self_connect', $taskInstance); // Prepare a update-check task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_update_check_task_class'); // Register it $handlerInstance->registerTask('update_check', $taskInstance); // Get the list instance here $listInstance = $nodeInstance->getListenerPoolInstance()->getPoolEntriesInstance(); // Prepare a ping task $taskInstance = ObjectFactory::createObjectByConfiguredName('node_ping_task_class', array($listInstance)); // Register it $handlerInstance->registerTask('ping', $taskInstance); // Put the task handler in registry Registry::getRegistry()->addInstance('task_handler', $handlerInstance); /* * Allow extra node-depending tasks, e.g. the bootstrapper node needs * booting its DHT. DHTs are decentralized and are working on * peer-to-peer basis. */ $nodeInstance->addExtraTasks($handlerInstance); } } // [EOF] ?>