]> git.mxchange.org Git - hub.git/commitdiff
Continued:
authorRoland Häder <roland@mxchange.org>
Fri, 19 Jul 2013 21:23:30 +0000 (21:23 +0000)
committerRoland Häder <roland@mxchange.org>
Fri, 19 Jul 2013 21:23:30 +0000 (21:23 +0000)
- renamed some methods to shorter names (it is okay)
- added stubs for node registration in DHT
- Used rather valid() than next() to avoid different behaviours of next()
- Other minor improvements

application/hub/interfaces/wrapper/class_NodeDhtWrapper.php
application/hub/main/database/wrapper/node/class_NodeDistributedHashTableDatabaseWrapper.php
application/hub/main/dht/node/class_NodeDhtFacade.php

index 622e864c876495ddd9fb09d8ca3424e548ec1344..c10b010cd1dcd3ba1e25407ebdce699f606647f4 100644 (file)
@@ -52,6 +52,35 @@ interface NodeDhtWrapper extends DatabaseWrapper {
         * @return      $nodeData       Node data array
         */
        function findNodeLocalBySessionId ($sessionId);
+
+       /**
+        * Determines whether the given node data is already inserted in the DHT
+        *
+        * @param       $nodeData               An array with valid node data
+        * @return      $isRegistered   Whether the given node data is already inserted
+        */
+       function isNodeRegistered (array $nodeData);
+
+       /**
+        * Registers a node with given data in the DHT. If the node is already
+        * registered this method shall throw an exception.
+        *
+        * @param       $nodeData       An array with valid node data
+        * @return      void
+        * @throws      NodeAlreadyRegisteredException  If the node is already registered
+        */
+       function registerNode (array $nodeData);
+
+       /**
+        * Updates a node's entry in the DHT with given data. This will enrich or
+        * just update already exsiting data. If the node is not found this method
+        * shall throw an exception.
+        *
+        * @param       $nodeData       An array with valid node data
+        * @return      void
+        * @throws      NodeDataMissingException        If the node's data is missing
+        */
+       function updateNode (array $nodeData);
 }
 
 // [EOF]
index 55f182f7f50683a7fb901dbf42e854e25f544e89..2ffcea51447223822660a0c477e9ac357a816d22 100644 (file)
@@ -119,7 +119,10 @@ class NodeDistributedHashTableDatabaseWrapper extends BaseDatabaseWrapper implem
                        // Get ip:port combination and "explode" it
                        $ipPort = $nodeInstance->getAddressPortArray();
 
-                       // Make sure both is valid
+                       /*
+                        * Make sure both is not 'invalid' which means that the resolver
+                        * didn't work.
+                        */
                        assert(($ipPort[0] !== 'invalid') && ($ipPort[1] !== 'invalid'));
 
                        // Add ip:port/node id as criteria
@@ -131,8 +134,8 @@ class NodeDistributedHashTableDatabaseWrapper extends BaseDatabaseWrapper implem
                        // Query database and get a result instance back
                        $resultInstance = $this->doSelectByCriteria($searchInstance);
 
-                       // Cache result of if there is an entry, next() will tell us if the next entry is valid
-                       $GLOBALS[__METHOD__] = $resultInstance->next();
+                       // Cache result of if there is an entry, valid() will tell us if an entry is there
+                       $GLOBALS[__METHOD__] = $resultInstance->valid();
                } // END - if
 
                // Return result
@@ -257,7 +260,56 @@ class NodeDistributedHashTableDatabaseWrapper extends BaseDatabaseWrapper implem
                // Run the "UPDATE" query
                $this->queryUpdateDataSet($dataSetInstance);
        }
+
+       /**
+        * Determines whether the given node data is already inserted in the DHT
+        *
+        * @param       $nodeData               An array with valid node data
+        * @return      $isRegistered   Whether the given node data is already inserted
+        */
+       public function isNodeRegistered (array $nodeData) {
+               // Get search criteria
+               $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
+
+               // Search for node id and limit it to one entry
+               $searchInstance->addCriteria(self::DB_COLUMN_NODE_ID, $nodeData[self::DB_COLUMN_NODE_ID]);
+               $searchInstance->setLimit(1);
+
+               // Query database and get a result instance back
+               $resultInstance = $this->doSelectByCriteria($searchInstance);
+
+               // Check if there is an entry
+               $isRegistered = $resultInstance->valid();
+
+               // Return registration status
+               return $isRegistered;
+       }
 }
 
+       /**
+        * Registers a node with given data in the DHT. If the node is already
+        * registered this method shall throw an exception.
+        *
+        * @param       $nodeData       An array with valid node data
+        * @return      void
+        * @throws      NodeAlreadyRegisteredException  If the node is already registered
+        */
+       public function registerNode (array $nodeData) {
+               $this->partialStub('nodeData=' . print_r($nodeData, TRUE));
+       }
+
+       /**
+        * Updates a node's entry in the DHT with given data. This will enrich or
+        * just update already exsiting data. If the node is not found this method
+        * shall throw an exception.
+        *
+        * @param       $nodeData       An array with valid node data
+        * @return      void
+        * @throws      NodeDataMissingException        If the node's data is missing
+        */
+       public function updateNode (array $nodeData) {
+               $this->partialStub('nodeData=' . print_r($nodeData, TRUE));
+       }
+
 // [EOF]
 ?>
index e37b76cf6510463e8d9bd5463a7f7bbe39ed6bc5..98ff98bed5ed0d71a302f7fc6699d22ebd509e88 100644 (file)
@@ -58,23 +58,23 @@ class NodeDhtFacade extends BaseDht implements Distributable, Registerable {
         *
         * @param       $dhtData        A valid array with DHT-related data (e.g. node/peer data)
         * @return      void
-        * @todo        Does the data need to be enriched?
+        * @todo        Does this data need to be enriched with more meta data?
         */
        protected function insertDataIntoDht (array $dhtData) {
                // Check if there is already an entry for given node_id
-               if ($this->getWrapperInstance()->isNodeRegisteredByNodeId($dhtData[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_NODE_ID])) {
+               if ($this->getWrapperInstance()->isNodeRegistered($dhtData)) {
                        /*
                         * Update existing record. Please note that this step is not secure
                         * (e.g. DHT poisoning) it would be good to implement some checks if
                         * the both node owner trust each other (see sub-project 'DSHT').
                         */
-                       $this->getWrapperInstance()->updateNodeEntry($dhtData);
+                       $this->getWrapperInstance()->updateNode($dhtData);
                } else {
                        /*
                         * Inserts given node data into the DHT. As above, this step does
                         * currently not perform any security checks.
                         */
-                       $this->getWrapperInstance()->registerNodeByData($dhtData);
+                       $this->getWrapperInstance()->registerNode($dhtData);
                }
        }
 
@@ -138,7 +138,7 @@ class NodeDhtFacade extends BaseDht implements Distributable, Registerable {
                $resultInstance = $this->getWrapperInstance()->findNodeLocalBySessionId($sessionId);
 
                // Is the next entry valid?
-               if ($resultInstance->next()) {
+               if (($resultInstance->valid()) && ($resultInstance->next())) {
                        /*
                         * Then load the first entry (more entries are being ignored and
                         * should not happen).
@@ -193,7 +193,7 @@ class NodeDhtFacade extends BaseDht implements Distributable, Registerable {
                $resultInstance = $this->getWrapperInstance()->doSelectByCriteria($searchInstance);
 
                // Is there already an entry?
-               if ($resultInstance->next()) {
+               if ($resultInstance->valid()) {
                        // Entry found, so update it
                        $this->getWrapperInstance()->updateNodeByMessageData($messageData, $handlerInstance, $searchInstance);
                } elseif ($forceUpdate === FALSE) {