/**
* A AnnouncementAnswerOkay handler
*
- * @author Roland Haeder <webmaster@ship-simu.org>
+ * @author Roland Haeder <webmaster@shipsimu.org>
* @version 0.0.0
- * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2014 Hub Developer Team
* @license GNU GPL 3.0 or any newer version
- * @link http://www.ship-simu.org
+ * @link http://www.shipsimu.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
// Call parent constructor
parent::__construct(__CLASS__);
+ // Init array
+ $this->searchData = array(
+ XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
+ XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS,
+ XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_LISTEN_PORT
+ );
+
// Set handler name
$this->setHandlerName('announcement_answer_okay');
}
* @param $messageData An array of message data
* @param $packageInstance An instance of a Receivable class
* @return void
- * @throws NodeSessionIdVerficationException If the provided session id is not matching
* @todo Do some more here: Handle karma, et cetera?
*/
public function handleAnswerMessageData (array $messageData, Receivable $packageInstance) {
- // Get a database wrapper instance
- $wrapperInstance = ObjectFactory::createObjectByConfiguredName('node_list_db_wrapper_class');
-
- // Get also a search criteria instance
- $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
-
- // Lookup external session id/external IP/port
- $searchInstance->addCriteria('node_session_id' , $messageData[XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID]);
- $searchInstance->addCriteria('node_external_ip', $messageData[XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP]);
- $searchInstance->addCriteria('node_tcp_port' , $messageData[XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT]);
-
- // Only one entry is fine
- $searchInstance->setLimit(1);
+ /*
+ * Query DHT and force update (which will throw an exception if the
+ * node is not found).
+ */
+ $this->getDhtInstance()->registerNodeByMessageData($messageData, $this, TRUE);
- // Run the query
- $resultInstance = $wrapperInstance->doSelectByCriteria($searchInstance);
+ // Get handler instance
+ $handlerInstance = Registry::getRegistry()->getInstance('task_handler');
- // Is there an try?
- if (!$resultInstance->next()) {
- // This is fatal, caused by "stolen" session id and/or not matching IP number/port combination
- throw new NodeSessionIdVerficationException(array($this, $messageData), BaseHubSystem::EXCEPTION_NODE_SESSION_ID_NOT_VERIFYING);
- } // END - if
+ // Generate DHT bootstrap task
+ $taskInstance = ObjectFactory::createObjectByConfiguredName('node_dht_late_bootstrap_task_class');
- // Update node data (include status code)
- $wrapperInstance->updateNodeByMessageData($messageData, $this, $searchInstance);
+ // Register it as well
+ $handlerInstance->registerTask('dht_late_bootstrap', $taskInstance);
// Get the node instance
- $nodeInstance = Registry::getRegistry()->getInstance('node');
+ $nodeInstance = NodeObjectFactory::createNodeInstance();
// Change state
$nodeInstance->getStateInstance()->nodeAnnouncementSuccessful();
*
* The following array is being handled over:
*
- * my-external-ip => 1.2.3.4
- * my-internal-ip => 5.6.7.8
- * my-status => reachable
- * my-session-id => aaabbbcccdddeeefff123456789
- * my-tcp-port => 9060
- * my-udp-port => 9060
- * answer-status => OKAY
- * message_type => announcement_answer
+ * my-external-address => 1.2.3.4
+ * my-internal-address => 5.6.7.8
+ * my-status => reachable
+ * my-session-id => aaabbbcccdddeeefff123456789
+ * my-tcp-port => 9060
+ * my-udp-port => 9060
+ * answer-status => OKAY
+ * message_type => announcement_answer
*
* @param $messageData An array with all message data
* @return void
*/
protected function initMessageConfigurationData (array $messageData) {
// Get node instance
- $nodeInstance = Registry::getRegistry()->getInstance('node');
+ $nodeInstance = NodeObjectFactory::createNodeInstance();
// Get an array of all accepted object types
$objectList = $nodeInstance->getListFromAcceptedObjectTypes();
// Add missing (temporary) configuration 'accepted_object_types'
- //$this->getConfigInstance()->setConfigEntry(implode(BaseHubNode::OBJECT_LIST_SEPARATOR, $objectList));
+ $this->getConfigInstance()->setConfigEntry(NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_ACCEPTED_OBJECTS, implode(BaseHubNode::OBJECT_LIST_SEPARATOR, $objectList));
}
/**
*/
protected function removeMessageConfigurationData (array $messageData) {
// Remove temporay configuration
- $this->getConfigInstance()->unsetConfigEntry('accepted_object_types');
+ $this->getConfigInstance()->unsetConfigEntry(NodeDistributedHashTableDatabaseWrapper::DB_COLUMN_ACCEPTED_OBJECTS);
}
}