]> git.mxchange.org Git - hub.git/blobdiff - application/hub/main/database/wrapper/node/class_NodeListDatabaseWrapper.php
Introduced (currently not used as type-hints) new interfaces:
[hub.git] / application / hub / main / database / wrapper / node / class_NodeListDatabaseWrapper.php
index e008420d2156f7f447f1d48a6fe1bc7f647b4261..6d47114467f1e47fbd64e428efd9665795c2b3e6 100644 (file)
@@ -4,7 +4,7 @@
  *
  * @author             Roland Haeder <webmaster@ship-simu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Hub Developer Team
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.ship-simu.org
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements Registerable {
+class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements NodeListWrapper Registerable {
        // 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';
 
@@ -58,30 +54,22 @@ class NodeListDatabaseWrapper extends BaseDatabaseWrapper implements Registerabl
                return $wrapperInstance;
        }
 
-       /**
-        * Getter for index key
-        *
-        * @return      $indexKey       Index key
-        */
-       public final function getIndexKey () {
-               return $this->getDatabaseInstance()->getIndexKey();
-       }
-
        /**
         * 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;
 
                // Now get a search criteria instance
                $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
 
-               // Search for the node number zero which is hard-coded the default
-               $searchInstance->addCriteria(NodeListDatabaseWrapper::DB_COLUMN_NODE_SESSION_ID, 1);
+               // Search for the node session id
+               $searchInstance->addCriteria('node_' . XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID, $sessionId);
                $searchInstance->setLimit(1);
 
                // Get a result back
@@ -93,12 +81,129 @@ 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
                return $recipient;
        }
+
+       /**
+        * 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);
+       }
 }
 
 // [EOF]