From: Roland Haeder Date: Sun, 16 Feb 2014 01:23:00 +0000 (+0100) Subject: Publication of DHT entries requires a fully booted DHT as else it will only find... X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=fbea3b373356393e0146fee27d22caa1daf80f45;p=hub.git Publication of DHT entries requires a fully booted DHT as else it will only find itself. Signed-off-by: Roland Haeder --- diff --git a/application/hub/interfaces/distributable/class_Distributable.php b/application/hub/interfaces/distributable/class_Distributable.php index 81a85c3a6..50bd97aec 100644 --- a/application/hub/interfaces/distributable/class_Distributable.php +++ b/application/hub/interfaces/distributable/class_Distributable.php @@ -83,6 +83,13 @@ interface Distributable extends FrameworkInterface { * @return $recipients An indexed array with DHT recipients */ function findRecipientsByPackageData (array $packageData); + + /** + * Whether the DHT has fully bootstrapped (after state 'booting') + * + * @return $isFullyBooted Whether the DHT is fully booted + */ + function hasFullyBootstrapped (); } // [EOF] diff --git a/application/hub/main/dht/class_BaseDht.php b/application/hub/main/dht/class_BaseDht.php index 76faf6952..a1de47c6c 100644 --- a/application/hub/main/dht/class_BaseDht.php +++ b/application/hub/main/dht/class_BaseDht.php @@ -222,6 +222,16 @@ abstract class BaseDht extends BaseHubSystem { // "Publish" the descriptor by sending it to the bootstrap/list nodes $this->publishHelperInstance->sendPackage($this); } + + /** + * Whether the DHT has fully bootstrapped (after state 'booting') + * + * @return $isFullyBooted Whether the DHT is fully booted + * @todo 0% done + */ + public function hasFullyBootstrapped () { + // Get state and check it + } } // [EOF] diff --git a/application/hub/main/factories/states/dht/.htaccess b/application/hub/main/factories/states/dht/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/application/hub/main/factories/states/dht/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/application/hub/main/factories/states/dht/class_DhtStateFactory.php b/application/hub/main/factories/states/dht/class_DhtStateFactory.php new file mode 100644 index 000000000..4685dc84f --- /dev/null +++ b/application/hub/main/factories/states/dht/class_DhtStateFactory.php @@ -0,0 +1,65 @@ + + * @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.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 DhtStateFactory extends ObjectFactory { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of a configurable DHT state and sets it in the + * given DHT instance. + * + * @param $stateName Name of the state + * @param $dhtInstance A Distributable class instance + * @return $stateInstance A Stateable class instance + */ + public static final function createDhtStateInstanceByName ($stateName, Distributable $dhtInstance) { + // Then construct the class' configuraton entry + $className = 'dht_' . $stateName . '_state_class'; + + // Get a class from that configuration entry + $stateInstance = self::createObjectByConfiguredName($className, array($dhtInstance)); + + // Debug message + self::createDebugInstance(__CLASS__)->debugOutput('DHT-STATE-FACTORY[' . __METHOD__ . ':' . __LINE__ . ']: DHT state has changed from ' . $dhtInstance->getPrintableState() . ' to ' . $stateInstance->getStateName() . '.'); + + // Once we have that state, set it in the DHT instance + $dhtInstance->setStateInstance($stateInstance); + + // Update DHT data + $dhtInstance->updateDhtData(); + + // For any purposes, return the state instance + return $stateInstance; + } +} + +// [EOF] +?> diff --git a/application/hub/main/factories/states/state/.htaccess b/application/hub/main/factories/states/state/.htaccess deleted file mode 100644 index 3a4288278..000000000 --- a/application/hub/main/factories/states/state/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/application/hub/main/factories/states/state/class_DhtStateFactory.php b/application/hub/main/factories/states/state/class_DhtStateFactory.php deleted file mode 100644 index 4685dc84f..000000000 --- a/application/hub/main/factories/states/state/class_DhtStateFactory.php +++ /dev/null @@ -1,65 +0,0 @@ - - * @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.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 DhtStateFactory extends ObjectFactory { - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates an instance of a configurable DHT state and sets it in the - * given DHT instance. - * - * @param $stateName Name of the state - * @param $dhtInstance A Distributable class instance - * @return $stateInstance A Stateable class instance - */ - public static final function createDhtStateInstanceByName ($stateName, Distributable $dhtInstance) { - // Then construct the class' configuraton entry - $className = 'dht_' . $stateName . '_state_class'; - - // Get a class from that configuration entry - $stateInstance = self::createObjectByConfiguredName($className, array($dhtInstance)); - - // Debug message - self::createDebugInstance(__CLASS__)->debugOutput('DHT-STATE-FACTORY[' . __METHOD__ . ':' . __LINE__ . ']: DHT state has changed from ' . $dhtInstance->getPrintableState() . ' to ' . $stateInstance->getStateName() . '.'); - - // Once we have that state, set it in the DHT instance - $dhtInstance->setStateInstance($stateInstance); - - // Update DHT data - $dhtInstance->updateDhtData(); - - // For any purposes, return the state instance - return $stateInstance; - } -} - -// [EOF] -?> diff --git a/application/hub/main/states/peer/class_BasePeerState.php b/application/hub/main/states/peer/class_BasePeerState.php index 8f1a731ab..9f2717f4c 100644 --- a/application/hub/main/states/peer/class_BasePeerState.php +++ b/application/hub/main/states/peer/class_BasePeerState.php @@ -51,7 +51,7 @@ class BasePeerState extends BaseState { /** * Checks whether the peer's state is 'connected' * - * @return $isConnected Whether the state is 'connected' + * @return $isConnected Whether the state is 'connected' */ public function isPeerStateConnected () { // Just compare it... diff --git a/application/hub/main/tasks/node/dht/class_NodeDhtPublicationCheckTask.php b/application/hub/main/tasks/node/dht/class_NodeDhtPublicationCheckTask.php index a37351cd1..7037e08ce 100644 --- a/application/hub/main/tasks/node/dht/class_NodeDhtPublicationCheckTask.php +++ b/application/hub/main/tasks/node/dht/class_NodeDhtPublicationCheckTask.php @@ -73,7 +73,7 @@ class NodeDhtPublicationCheckTask extends BaseTask implements Taskable, Visitabl $dhtInstance = $this->getDhtInstance(); // Has the DHT some unpublished entries? - if ($dhtInstance->hasUnpublishedEntries()) { + if (($dhtInstance->hasFullyBootstrapped()) && ($dhtInstance->hasUnpublishedEntries())) { // Then initiate publishing them $dhtInstance->initEntryPublication(); } // END - if