]> git.mxchange.org Git - hub.git/blobdiff - application/hub/main/recipient/dht/class_DhtRecipient.php
Very basic implementation for adding "discovered" DHT recipients as package recipients.
[hub.git] / application / hub / main / recipient / dht / class_DhtRecipient.php
index ffdaeba8cb5e9e384dad856278aa3d492ad17902..256fbb9a2cc0dcef52fedefc632ded867c5f7b2b 100644 (file)
@@ -47,19 +47,39 @@ class DhtRecipient extends BaseRecipient implements Recipient {
 
        /**
         * Tries to resolve given recipient into session ids or ip:port combination
-        * depending on implementation (hint: Template Method Pattern)
+        * depending on implementation (hint: Template Method Pattern). This
+        * implementation will add more than one recipient to the list as a DHT is
+        * distributed and the package might go to more than one recipient.
         *
         * @param       $recipient              Recipient to resolve (e.g. could be a virtual recipient or direct session id)
         * @param       $listInstance   An instance of a Listable class
-        * @return      $resolved               Resolved recipient or VOID if only the set list has been filled
+        * @param       $packageData    Valid package data array
+        * @return      void
         * @throws      FrameworkException      Could throw different exceptions depending on implementation
-        * @todo        0% done
         */
-       public function resolveRecipient ($recipient, Listable $listInstance) {
+       public function resolveRecipient ($recipient, Listable $listInstance, array $packageData) {
                // Make sure the recipient is valid
                //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DHT-RECIPIENT: recipient=' . $recipient);
                assert($recipient == NetworkPackage::NETWORK_TARGET_DHT);
-               $this->partialStub('Please implement this method. recipient=' . $recipient);
+
+               // Get recipient discovery instance
+               $discoverInstance = ObjectFactory::createObjectByConfiguredName('dht_recipient_discovery_class');
+
+               // "Discover" recipients by given package data
+               $recipients = $discoverInstance->resolveRecipientsByPackageData($packageData);
+
+               // Now "walk" through all elements and add them to the list
+               foreach ($recipients as $recipient) {
+                       // These array elements must exist for this loop:
+                       assert(isset($recipient[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_EXTERNAL_IP]));
+                       assert(isset($recipient[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_LISTEN_PORT]));
+
+                       // Put ip and port both together
+                       $ipPort = $recipient[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_EXTERNAL_IP] . ':' . $recipient[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_LISTEN_PORT];
+
+                       // Add it to the list
+                       $listInstance->addEntry('ip_port', $ipPort);
+               } // END - foreach
        }
 }