From 2579996600a315ed8da2718545400d0baab3cb5f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sun, 26 Aug 2012 20:52:08 +0000 Subject: [PATCH] Introduced DHT (maybe own implementation, maybe Kademlia, who knows?). In the next time all direct calls to the node list wrapper class will be rewritten to use a more easy interface from the DHT class --- .gitattributes | 3 + application/hub/config.php | 3 + application/hub/main/factories/class_ | 59 +++++++++++++++++ application/hub/main/factories/dht/.htaccess | 1 + .../factories/dht/class_DhtObjectFactory.php | 63 +++++++++++++++++++ ...NodeRequestNodeListMessageAnswerHelper.php | 3 + 6 files changed, 132 insertions(+) create mode 100644 application/hub/main/factories/class_ create mode 100644 application/hub/main/factories/dht/.htaccess create mode 100644 application/hub/main/factories/dht/class_DhtObjectFactory.php diff --git a/.gitattributes b/.gitattributes index 6c3e40aca..5779dcfc6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -231,6 +231,9 @@ application/hub/main/factories/chain/.htaccess -text svneol=unset#text/plain application/hub/main/factories/chain/class_PackageFilterChainFactory.php svneol=native#text/plain application/hub/main/factories/chunks/.htaccess -text svneol=unset#text/plain application/hub/main/factories/chunks/class_ChunkHandlerFactory.php svneol=native#text/plain +application/hub/main/factories/class_ svneol=native#text/plain +application/hub/main/factories/dht/.htaccess -text svneol=unset#text/plain +application/hub/main/factories/dht/class_DhtObjectFactory.php svneol=native#text/plain application/hub/main/factories/discovery/.htaccess -text svneol=unset#text/plain application/hub/main/factories/discovery/class_PackageDiscoveryFactory.php svneol=native#text/plain application/hub/main/factories/discovery/class_SocketDiscoveryFactory.php svneol=native#text/plain diff --git a/application/hub/config.php b/application/hub/config.php index 4ba22e194..7a81eaf1f 100644 --- a/application/hub/config.php +++ b/application/hub/config.php @@ -710,6 +710,9 @@ $cfg->setConfigEntry('package_decoder_class', 'PackageDecoder'); // @TODO This is very static, rewrite it to more flexible $cfg->setConfigEntry('package_recipient_max_count', 3); +// CFG: NODE-DHT-CLASS +$cfg->setConfigEntry('node_dht_class', 'NodeDhtFacade'); + /////////////////////////////////////////////////////////////////////////////// // Peer states /////////////////////////////////////////////////////////////////////////////// diff --git a/application/hub/main/factories/class_ b/application/hub/main/factories/class_ new file mode 100644 index 000000000..71a957b15 --- /dev/null +++ b/application/hub/main/factories/class_ @@ -0,0 +1,59 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.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 ???Factory extends ObjectFactory { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Returns a singleton (registry-based) !!! instance + * + * @return $handlerInstance An instance of a !!! class + */ + public static final function create???Instance () { + // If there is no handler? + if (Registry::getRegistry()->instanceExists('|||')) { + // Get handler from registry + $handlerInstance = Registry::getRegistry()->getInstance('|||'); + } else { + // Get the handler instance + $handlerInstance = self::createObjectByConfiguredName('|||_class'); + + // Add it to the registry + Registry::getRegistry()->addInstance('|||', $handlerInstance); + } + + // Return the instance + return $handlerInstance; + } +} + +// [EOF] +?> diff --git a/application/hub/main/factories/dht/.htaccess b/application/hub/main/factories/dht/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/application/hub/main/factories/dht/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/application/hub/main/factories/dht/class_DhtObjectFactory.php b/application/hub/main/factories/dht/class_DhtObjectFactory.php new file mode 100644 index 000000000..535e85889 --- /dev/null +++ b/application/hub/main/factories/dht/class_DhtObjectFactory.php @@ -0,0 +1,63 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.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 DhtObjectFactory extends ObjectFactory { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Returns a singleton (registry-based) DHT object instance + * + * @param $nodeInstance An instance of a NodeHelper class + * @return $dhtInstance An instance of a DHT object class + */ + public static final function createDhtObjectInstance (NodeHelper $nodeInstance) { + // If there is no handler? + if (Registry::getRegistry()->instanceExists('node_dht')) { + // Get handler from registry + $dhtInstance = Registry::getRegistry()->getInstance('node_dht'); + } else { + // Get the handler instance + $dhtInstance = self::createObjectByConfiguredName('node_dht_class'); + + // Add it to the registry + Registry::getRegistry()->addInstance('node_dht', $dhtInstance); + } + + // Set node instance in DHT instance + $dhtInstance->setNodeInstance($nodeInstance); + + // Return the instance + return $dhtInstance; + } +} + +// [EOF] +?> diff --git a/application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php b/application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php index 6926ed28f..553a9f804 100644 --- a/application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php +++ b/application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php @@ -81,6 +81,9 @@ class NodeRequestNodeListMessageAnswerHelper extends BaseHubAnswerHelper impleme // Is must not be NULL (then it can only be a template instance) assert(!is_null($entriesInstance)); + // Get DHT instance + $dhtInstance = DhtObjectFactory::createDhtInstance($nodeInstance); + // Render the XML content $templateInstance->renderXmlContent(); } -- 2.39.5