X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=application%2Fhub%2Fmain%2Fdatabase%2Fwrapper%2Fnode%2Fclass_NodeListDatabaseWrapper.php;h=6d47114467f1e47fbd64e428efd9665795c2b3e6;hb=11b36f339c5a97ec6afb6eb7244b825bc2812bf6;hp=e008420d2156f7f447f1d48a6fe1bc7f647b4261;hpb=81c90916f7a908c77f8844dff5adc6fae3aed422;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 e008420d2..6d4711446 100644 --- a/application/hub/main/database/wrapper/node/class_NodeListDatabaseWrapper.php +++ b/application/hub/main/database/wrapper/node/class_NodeListDatabaseWrapper.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @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 * @@ -21,14 +21,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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]