X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=inline;f=application%2Fhub%2Fmain%2Fdatabase%2Fwrapper%2Fnode%2Fclass_NodeListDatabaseWrapper.php;h=4ec539e9c34a41521e9f5e125993dc07a90288a9;hb=4c4dbb818c6da362302cd02a601cce0c78413bfb;hp=2f2ac8aa545edd1a066d342808f0a916c2cd9f80;hpb=c13ca7c93ee55b02d1d3320fca5d2d8d6e953768;p=hub.git diff --git a/application/hub/main/database/wrapper/node/class_NodeListDatabaseWrapper.php b/application/hub/main/database/wrapper/node/class_NodeListDatabaseWrapper.php index 2f2ac8aa5..4ec539e9c 100644 --- a/application/hub/main/database/wrapper/node/class_NodeListDatabaseWrapper.php +++ b/application/hub/main/database/wrapper/node/class_NodeListDatabaseWrapper.php @@ -25,10 +25,6 @@ class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements Registerabl // Table names const DB_TABLE_NODE_LIST = 'node_list'; - // Constants for column name - const DB_COLUMN_NODE_SESSION_ID = 'node_session_id'; - const DB_COLUMN_NODE_IP_PORT = 'node_ipport'; - // Other constants const INVALID_IP_PORT = 'invalid:invalid'; @@ -62,9 +58,10 @@ class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements Registerabl * Resolves a session id into an ip:port combination * * @param $sessionId A valid session id + * @param $protocol Name of the protocol (TCP/UDP) * @return $recipient Recipient as ip:port combination */ - public function resolveIpPortBySessionId ($sessionId) { + public function resolveIpPortBySessionId ($sessionId, $protocol) { // Set invalid ip:port combination $recipient = self::INVALID_IP_PORT; @@ -72,7 +69,7 @@ class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements Registerabl $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class'); // Search for the node session id - $searchInstance->addCriteria(NodeListDatabaseWrapper::DB_COLUMN_NODE_SESSION_ID, $sessionId); + $searchInstance->addCriteria('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID, $sessionId); $searchInstance->setLimit(1); // Get a result back @@ -84,7 +81,28 @@ class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements Registerabl $this->setResultInstance($resultInstance); // Get the node id from result and set it - $recipient = $this->getField(NodeListDatabaseWrapper::DB_COLUMN_NODE_IP_PORT); + $recipientIp = $this->getField('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP); + + // Which protocol? + switch ($protocol) { + case 'TCP': // Transmission Control Procol has been used + $recipientPort = $this->getField('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT); + break; + + case 'UDP': // User Datagram Protocol has been used + $recipientPort = $this->getField('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT); + break; + + default: // Unsupported protocol detected! + $this->debugBackTrace('Unsupported protocol ' . $protocol . ' specified!'); + break; + } // END - switch + + // Now put both together + $recipient = $recipientIp . ':' . $recipientPort; + + // Debug message + $this->debugOutput('DATABASE-WRAPPER: sessionId[' . $protocol . ']=' . $sessionId . ' resolved as recipient=' . $recipient); } // END - if // Return result @@ -95,17 +113,38 @@ class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements Registerabl * Resolves a ip:port combination into a session id * * @param $ipPort Ip:port combination + * @param $protocol Name of the used protocol (TCP/UDP) * @return $sessionId A valid session id */ - public function resolveSessionIdByIpPort ($ipPort) { + public function resolveSessionIdByIpPort ($ipPort, $protocol) { // Set invalid session id as default $sessionId = 'invalid'; + // Split ip:port + $ipPortArray = explode(':', $ipPort); + // Now get a search criteria instance $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class'); // Search for the node session id - $searchInstance->addCriteria(NodeListDatabaseWrapper::DB_COLUMN_NODE_IP_PORT, $ipPort); + $searchInstance->addCriteria('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP, $ipPortArray[0]); + + // Which protocol? + switch ($protocol) { + case 'TCP': // Transmission Control Procol has been used + $searchInstance->addCriteria('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT, $ipPortArray[1]); + break; + + case 'UDP': // User Datagram Protocol has been used + $searchInstance->addCriteria('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT, $ipPortArray[1]); + break; + + default: // Unsupported protocol detected! + $this->debugBackTrace('Unsupported protocol ' . $protocol . ' specified!'); + break; + } // END - switch + + // Only one record $searchInstance->setLimit(1); // Get a result back @@ -117,12 +156,33 @@ class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements Registerabl $this->setResultInstance($resultInstance); // Get the session from result - $sessionId = $this->getField(NodeListDatabaseWrapper::DB_COLUMN_NODE_SESSION_ID); + $sessionId = $this->getField('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID); } // END - if // Return result return $sessionId; } + + /** + * Registeres a node by given message data. + * + * @param $messageData An array of all message data + * @param $handlerInstance An instance of a HandleableMessage class + * @return void + */ + public function registerNodeByMessageData (array $messageData, HandleableMessage $handlerInstance) { + // Get a data set instance + $dataSetInstance = ObjectFactory::createObjectByConfiguredName('dataset_criteria_class', array(self::DB_TABLE_NODE_LIST)); + + // Set primary key (session id) + $dataSetInstance->setUniqueKey('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID); + + // Add all array elements + $handlerInstance->addArrayToDataSet($dataSetInstance, $messageData); + + // Run the "INSERT" query + $this->queryInsertDataSet($dataSetInstance); + } } // [EOF]