--- /dev/null
+<?php
+/**
+ * A RequestNodeListAnswerOkay handler
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @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
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 RequestNodeListAnswerOkayHandler extends BaseAnserStatusHandler implements HandleableAnswerStatus, Registerable {
+ /**
+ * Protected constructor
+ *
+ * @return void
+ */
+ protected function __construct () {
+ // Call parent constructor
+ parent::__construct(__CLASS__);
+
+ // Set handler name
+ $this->setHandlerName('request_node_list_answer_okay');
+ }
+
+ /**
+ * Creates an instance of this class
+ *
+ * @return $handlerInstance An instance of a HandleableMessage class
+ */
+ public final static function createRequestNodeListAnswerOkayHandler () {
+ // Get new instance
+ $handlerInstance = new RequestNodeListAnswerOkayHandler();
+
+ // Return the prepared instance
+ return $handlerInstance;
+ }
+
+ /**
+ * Handles given message data array
+ *
+ * @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[XmlRequestNodeListAnswerTemplateEngine::REQUEST_DATA_SESSION_ID]);
+
+ // Only one entry is fine
+ $searchInstance->setLimit(1);
+
+ // Run the query
+ $resultInstance = $wrapperInstance->doSelectByCriteria($searchInstance);
+
+ // 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
+
+ // Get the node instance
+ $nodeInstance = Registry::getRegistry()->getInstance('node');
+
+ // Change state
+ $nodeInstance->getStateInstance()->nodeRequestNodeListSuccessful();
+
+ // Prepare next message ("hello" message to all returned nodes)
+ $this->prepareNextMessage($messageData, $packageInstance);
+ }
+
+ /**
+ * Initializes configuration data from given message data array
+ *
+ * The following array is being handled over:
+ *
+ * session-id => aaabbbcccdddeeefff123456789
+ * node-list => aabb:ccdd:eeff
+ * answer-status => OKAY
+ * message_type => request_node_list_answer
+ *
+ * @param $messageData An array with all message data
+ * @return void
+ * @todo 0% done
+ */
+ protected function initMessageConfigurationData (array $messageData) {
+ $this->partialStub('Please implement this method.');
+ }
+
+ /**
+ * Removes configuration data with given message data array from global
+ * configuration. For content of $messageData see method comment above.
+ *
+ * @param $messageData An array with all message data
+ * @return void
+ * @todo 0% done
+ */
+ protected function removeMessageConfigurationData (array $messageData) {
+ $this->partialStub('Please implement this method.');
+ }
+}
+
+// [EOF]
+?>