]> git.mxchange.org Git - hub.git/commitdiff
Added very basic implementation of DHT bootstrapping (there are some configuration...
authorRoland Häder <roland@mxchange.org>
Thu, 14 Feb 2013 21:58:55 +0000 (21:58 +0000)
committerRoland Häder <roland@mxchange.org>
Thu, 14 Feb 2013 21:58:55 +0000 (21:58 +0000)
.gitattributes
application/hub/main/dht/class_BaseDht.php
application/hub/main/dht/node/class_NodeDhtFacade.php
application/hub/main/factories/states/state/.htaccess [new file with mode: 0644]
application/hub/main/factories/states/state/class_DhtStateFactory.php [new file with mode: 0644]

index a46eec82f7a70424712d5ede2b0437575929b614..6a9d5e874426fa48495f0b5baee61f920eb90cc8 100644 (file)
@@ -274,6 +274,8 @@ application/hub/main/factories/states/node/.htaccess svneol=native#text/plain
 application/hub/main/factories/states/node/class_NodeStateFactory.php svneol=native#text/plain
 application/hub/main/factories/states/peer/.htaccess -text svneol=unset#text/plain
 application/hub/main/factories/states/peer/class_PeerStateFactory.php svneol=native#text/plain
+application/hub/main/factories/states/state/.htaccess -text svneol=unset#text/plain
+application/hub/main/factories/states/state/class_DhtStateFactory.php svneol=native#text/plain
 application/hub/main/factories/tags/.htaccess -text svneol=unset#text/plain
 application/hub/main/factories/tags/class_PackageTagsFactory.php svneol=native#text/plain
 application/hub/main/filter/.htaccess -text svneol=unset#text/plain
index f9dfa5fdf9d06df69f721c27cc3518720662afac..a71c2f3050164dd87e2ca94f016c02c933a576b2 100644 (file)
@@ -31,6 +31,12 @@ class BaseDht extends BaseHubSystem {
        protected function __construct ($className) {
                // Call parent constructor
                parent::__construct($className);
+
+               /*
+                * Get the state factory and create the initial state, we don't need
+                * the state instance here
+                */
+               DhtStateFactory::createDhtStateInstanceByName('init', $this);
        }
 }
 
index 56c69efe21efe1a255ea3160444ba090be31dab8..804eb93d841667c90cd01e820407ab52639ab354 100644 (file)
@@ -65,6 +65,9 @@ class NodeDhtFacade extends BaseDht implements Distributable, Registerable {
                        // No, so register it
                        $this->getWrapperInstance()->registerLocalNode();
                }
+
+               // Change state
+               $this->getStateInstance()->dhtHasInitialized();
        }
 
        /**
@@ -75,6 +78,20 @@ class NodeDhtFacade extends BaseDht implements Distributable, Registerable {
         * @return      void
         */
        public function bootstrapDht () {
+               // Get a helper instance
+               $helperInstance = ObjectFactory::createObjectByConfiguredName('dht_bootstrap_helper_class');
+
+               // Load the announcement descriptor
+               $helperInstance->loadDescriptorXml($this);
+
+               // Compile all variables
+               $helperInstance->getTemplateInstance()->compileConfigInVariables();
+
+               // "Publish" the descriptor by sending it to the bootstrap/list nodes
+               $helperInstance->sendPackage($this);
+
+               // Change state
+               $this->getStateInstance()->dhtHasBooted();
        }
 
        /**
diff --git a/application/hub/main/factories/states/state/.htaccess b/application/hub/main/factories/states/state/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+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
new file mode 100644 (file)
index 0000000..1cc1a8d
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+/**
+ * A factory class for DHT states
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @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 <http://www.gnu.org/licenses/>.
+ */
+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[' . __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]
+?>