X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=application%2Fhub%2Fmain%2Fdatabase%2Fwrapper%2Fnode%2Fclass_NodeDistributedHashTableDatabaseWrapper.php;fp=application%2Fhub%2Fmain%2Fdatabase%2Fwrapper%2Fnode%2Fclass_NodeDistributedHashTableDatabaseWrapper.php;h=2ffcea51447223822660a0c477e9ac357a816d22;hb=747f28ca7f5cbd6f2db85cc486144602617a824d;hp=55f182f7f50683a7fb901dbf42e854e25f544e89;hpb=d5813b87cab5b1d9a704b99186ca45e628322e28;p=hub.git diff --git a/application/hub/main/database/wrapper/node/class_NodeDistributedHashTableDatabaseWrapper.php b/application/hub/main/database/wrapper/node/class_NodeDistributedHashTableDatabaseWrapper.php index 55f182f7f..2ffcea514 100644 --- a/application/hub/main/database/wrapper/node/class_NodeDistributedHashTableDatabaseWrapper.php +++ b/application/hub/main/database/wrapper/node/class_NodeDistributedHashTableDatabaseWrapper.php @@ -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] ?>