]> git.mxchange.org Git - hub.git/blobdiff - application/hub/main/database/wrapper/node/class_NodeListDatabaseWrapper.php
Added internal IP handling (unfinished), added package tags
[hub.git] / application / hub / main / database / wrapper / node / class_NodeListDatabaseWrapper.php
index 2f2ac8aa545edd1a066d342808f0a916c2cd9f80..4ec539e9c34a41521e9f5e125993dc07a90288a9 100644 (file)
@@ -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]