// Return the prepared instance
return $dhtInstance;
}
+
+ /**
+ * Registers/updates an entry in the DHT with given data from $dhtData
+ * array. Different DHT implemtations may handle this differently as they
+ * may enrich the data with more meta data.
+ *
+ * @param $dhtData A valid array with DHT-related data (e.g. node/peer data)
+ * @return void
+ * @todo 0% done
+ */
+ protected function insertDataIntoDht (array $dhtData) {
+ $this->partialStub('Please implement this method.');
+ }
}
// [EOF]
* 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 BaseDht extends BaseHubSystem {
+abstract class BaseDht extends BaseHubSystem {
/**
* Stacker name for "INSERT" node data
*/
* @return void
*/
private function initStackers () {
- // "Walk" through all (more will be added as needed
- foreach (
- array(
- self::STACKER_NAME_INSERT_NODE,
- ) as $stackerName) {
- // Init this stack
- $this->getStackerInstance()->initStacker($stackerName);
- } // END - foreach
+ // Initialize all stacker
+ $this->getStackerInstance()->initStackers(array(
+ self::STACKER_NAME_INSERT_NODE,
+ ));
}
+ /**
+ * Registers/updates an entry in the DHT with given data from $dhtData
+ * array. Different DHT implemtations may handle this differently as they
+ * may enrich the data with more meta data.
+ *
+ * @param $dhtData A valid array with DHT-related data (e.g. node/peer data)
+ * @return void
+ */
+ protected abstract function insertDataIntoDht (array $dhtData);
+
/**
* Updates/refreshes DHT data (e.g. status).
*
// Get next node data from stack
$nodeData = $this->getStackerInstance()->popNamed(self::STACKER_NAME_INSERT_NODE);
- die(__METHOD__ . ':nodeData=' . print_r($nodeData, TRUE));
+ // Insert the data
+ $this->insertDataIntoDht($nodeData);
}
}
return $dhtInstance;
}
+ /**
+ * Registers/updates an entry in the DHT with given data from $dhtData
+ * array. Different DHT implemtations may handle this differently as they
+ * may enrich the data with more meta data.
+ *
+ * @param $dhtData A valid array with DHT-related data (e.g. node/peer data)
+ * @return void
+ * @todo Does the data need to be enriched?
+ */
+ 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])) {
+ /*
+ * 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($nodeData);
+ } else {
+ /*
+ * Inserts given node data into the DHT. As above, this step does
+ * currently not perform any security checks.
+ */
+ $this->getWrapperInstance()->registerNodeByData($nodeData);
+ }
+ }
+
/**
* Initializes the distributed hash table (DHT)
*
*/
protected function initStackers ($forceReInit = FALSE) {
// Initialize all
- foreach (
- array(
- self::STACKER_NAME_UNDECLARED,
- self::STACKER_NAME_DECLARED,
- self::STACKER_NAME_OUTGOING,
- self::STACKER_NAME_DECODED_INCOMING,
- self::STACKER_NAME_DECODED_HANDLED,
- self::STACKER_NAME_DECODED_CHUNKED,
- self::STACKER_NAME_NEW_MESSAGE,
- self::STACKER_NAME_PROCESSED_MESSAGE,
- self::STACKER_NAME_BACK_BUFFER
- ) as $stackerName) {
- // Init this stacker
- //* DEBUG: */ print(__METHOD__ . ': stackerName=' . $stackerName . ',forceReInit=' . intval($forceReInit) . PHP_EOL);
- $this->getStackerInstance()->initStacker($stackerName, $forceReInit);
- } // END - foreach
+ $this->getStackerInstance()->initStackers(array(
+ self::STACKER_NAME_UNDECLARED,
+ self::STACKER_NAME_DECLARED,
+ self::STACKER_NAME_OUTGOING,
+ self::STACKER_NAME_DECODED_INCOMING,
+ self::STACKER_NAME_DECODED_HANDLED,
+ self::STACKER_NAME_DECODED_CHUNKED,
+ self::STACKER_NAME_NEW_MESSAGE,
+ self::STACKER_NAME_PROCESSED_MESSAGE,
+ self::STACKER_NAME_BACK_BUFFER
+ ));
}
/**