+
+ /**
+ * 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, $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('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
+ $resultInstance = $this->doSelectByCriteria($searchInstance);
+
+ // Is it valid?
+ if ($resultInstance->next()) {
+ // Save the result instance in this class
+ $this->setResultInstance($resultInstance);
+
+ // Get the session from result
+ $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);
+ }
+
+ /**
+ * Updates an existing entry in node list
+ *
+ * @param $messageData An array of all message data
+ * @param $handlerInstance An instance of a HandleableMessage class
+ * @return void
+ */
+ public function updateNodeByMessageData (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 "UPDATE" query
+ $this->queryUpdateDataSet($dataSetInstance);
+ }