X-Git-Url: https://git.mxchange.org/?p=hub.git;a=blobdiff_plain;f=application%2Fhub%2Fmain%2Frecipient%2Fdht%2Fclass_DhtRecipient.php;h=e8f2139660fc1bb5a76f4dafd4c62c3235aec110;hp=baef263859152d8f7410cb8bc86fa7bc253baada;hb=73aff29b9bc78031853b0b8c0fe0a8e04f66ac29;hpb=20d457aab33983f395962b20590c0c6c12669a43 diff --git a/application/hub/main/recipient/dht/class_DhtRecipient.php b/application/hub/main/recipient/dht/class_DhtRecipient.php index baef26385..e8f213966 100644 --- a/application/hub/main/recipient/dht/class_DhtRecipient.php +++ b/application/hub/main/recipient/dht/class_DhtRecipient.php @@ -2,11 +2,11 @@ /** * A DHT recipient * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub Developer Team * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org + * @link http://www.shipsimu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -46,19 +46,47 @@ 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) + * Tries to resolve given recipient into session ids or Universal Node Locator + * 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) { + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DHT-RECIPIENT[' . __METHOD__ . ':' . __LINE__ . ']: recipient=' . $recipient . ' - CALLED!'); + // Make sure the recipient is valid - assert($recipient == 'dht'); - $this->partialStub('Please implement this method. recipient=' . $recipient); + assert($recipient == NetworkPackage::NETWORK_TARGET_DHT); + + // 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: + // @TODO Unfinished + die(__METHOD__ . ':recipient=' . print_r($recipient, TRUE)); + assert(!empty($recipient[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_EXTERNAL_ADDRESS])); + + // Put ip and port both together + $unl = $recipient[NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_EXTERNAL_ADDRESS]; + + // Add it to the list + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DHT-RECIPIENT[' . __METHOD__ . ':' . __LINE__ . ']: Calling listInstance->addEntry(' . $unl . ') ...'); + $listInstance->addEntry('unl', $unl); + } // END - foreach + + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DHT-RECIPIENT[' . __METHOD__ . ':' . __LINE__ . ']: recipient=' . $recipient . ' - EXIT!'); } }