const DB_TABLE_NODE_DHT = 'node_dht';
// Constants for database column names
- const DB_COLUMN_NODE_ID = 'node_id';
- const DB_COLUMN_SESSION_ID = 'session_id';
- const DB_COLUMN_IP_PORT = 'ip_port';
+ const DB_COLUMN_NODE_ID = 'node_id';
+ const DB_COLUMN_SESSION_ID = 'session_id';
+ const DB_COLUMN_IP_PORT = 'ip_port';
+ const DB_COLUMN_PRIVATE_KEY = 'private_key';
+ const DB_COLUMN_PRIVATE_KEY_HASH = 'private_key_hash';
+ const DB_COLUMN_NODE_TYPE = 'node_type';
/**
* Protected constructor
return $wrapperInstance;
}
+ /**
+ * Prepares an instance of a StoreableCriteria class with all node data for
+ * insert/update queries.
+ *
+ * @return $dataSetInstance An instance of a StoreableCriteria class
+ */
+ private function prepareDataSetInstance () {
+ // Get node/request instances
+ $nodeInstance = Registry::getRegistry()->getInstance('node');
+ $requestInstance = ApplicationHelper::getSelfInstance()->getRequestInstance();
+
+ // Get a dataset instance
+ $dataSetInstance = ObjectFactory::createObjectByConfiguredName('dataset_criteria_class', array(self::DB_TABLE_NODE_DHT));
+
+ // Set the primary key
+ $dataSetInstance->setUniqueKey(self::DB_COLUMN_NODE_ID);
+
+ // Add public node data
+ $dataSetInstance->addCriteria(self::DB_COLUMN_NODE_TYPE , $requestInstance->getRequestElement('mode'));
+ $dataSetInstance->addCriteria(self::DB_COLUMN_IP_PORT , $nodeInstance->getAddressPort());
+ $dataSetInstance->addCriteria(self::DB_COLUMN_NODE_ID , $nodeInstance->getNodeId());
+ $dataSetInstance->addCriteria(self::DB_COLUMN_SESSION_ID , $nodeInstance->getSessionId());
+ $dataSetInstance->addCriteria(self::DB_COLUMN_PRIVATE_KEY_HASH, $nodeInstance->getPrivateKeyHash());
+
+ // Return it
+ return $dataSetInstance;
+ }
+
/**
* Checks whether the local (*this*) node is registered in the DHT by
* checking if the external ip/port is found.
* @return void
*/
public function registerLocalNode () {
- $this->partialStub('Not implemented yet.');
+ // Assert to make sure this method is called with no record in DB (the actual backend of the DHT)
+ assert(!$this->isLocalNodeRegistered());
+
+ // Get prepared data set instance
+ $dataSetInstance = $this->prepareDataSetInstance();
+
+ // "Insert" this dataset instance completely into the database
+ $this->queryInsertDataSet($dataSetInstance);
}
/**
* @return void
*/
public function updateLocalNode () {
- $this->partialStub('Not implemented yet.');
+ // Assert to make sure this method is called with one record in DB (the actual backend of the DHT)
+ assert($this->isLocalNodeRegistered());
+
+ // Get node instance
+ $nodeInstance = Registry::getRegistry()->getInstance('node');
+
+ // 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, $nodeInstance->getNodeId());
+ $searchInstance->setLimit(1);
+
+ // Get a prepared dataset instance
+ $dataSetInstance = $this->prepareDataSetInstance();
+
+ // Set search instance
+ $dataSetInstance->setSearchInstance($searchInstance);
+
+ // Update DHT database record
+ $this->queryUpdateDataSet($dataSetInstance);
}
}