From d1cefc7b88d3e7f80ad6f13c548fc0dbfc59bdf1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Wed, 22 Aug 2012 19:53:12 +0000 Subject: [PATCH] Added helper for sending out 'request-node-list' answers --- .gitattributes | 2 + application/hub/config.php | 3 + .../main/helper/hub/answer/requests/.htaccess | 1 + ...NodeRequestNodeListMessageAnswerHelper.php | 103 ++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 application/hub/main/helper/hub/answer/requests/.htaccess create mode 100644 application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php diff --git a/.gitattributes b/.gitattributes index 1063fc781..86ad56c62 100644 --- a/.gitattributes +++ b/.gitattributes @@ -363,6 +363,8 @@ application/hub/main/helper/hub/answer/.htaccess -text svneol=unset#text/plain application/hub/main/helper/hub/answer/announcement/.htaccess -text svneol=unset#text/plain application/hub/main/helper/hub/answer/announcement/class_NodeAnnouncementMessageAnswerHelper.php svneol=native#text/plain application/hub/main/helper/hub/answer/class_BaseHubAnswerHelper.php svneol=native#text/plain +application/hub/main/helper/hub/answer/requests/.htaccess -text svneol=unset#text/plain +application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php svneol=native#text/plain application/hub/main/helper/hub/class_ svneol=native#text/plain application/hub/main/helper/hub/class_BaseHubHelper.php svneol=native#text/plain application/hub/main/helper/hub/connection/.htaccess -text svneol=unset#text/plain diff --git a/application/hub/config.php b/application/hub/config.php index cc60a169d..8ce18966f 100644 --- a/application/hub/config.php +++ b/application/hub/config.php @@ -228,6 +228,9 @@ $cfg->setConfigEntry('message_type_request_node_list_handler_class', 'NodeMessag // CFG: NODE-ANSWER-MESSAGE-ANNOUNCEMENT-HELPER-CLASS $cfg->setConfigEntry('node_answer_message_announcement_helper_class', 'NodeAnnouncementMessageAnswerHelper'); +// CFG: NODE-ANSWER-MESSAGE-REQUEST-NODE-LIST-HELPER-CLASS +$cfg->setConfigEntry('node_answer_message_request_node_list_helper_class', 'NodeRequestNodeListMessageAnswerHelper'); + // CFG: NODE-NEXT-ANNOUNCEMENT-ANSWER-OKAY-HELPER-CLASS $cfg->setConfigEntry('node_next_announcement_answer_okay_helper_class', 'NodeRequestNodeListHelper'); diff --git a/application/hub/main/helper/hub/answer/requests/.htaccess b/application/hub/main/helper/hub/answer/requests/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/application/hub/main/helper/hub/answer/requests/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php b/application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php new file mode 100644 index 000000000..257b753a1 --- /dev/null +++ b/application/hub/main/helper/hub/answer/requests/class_NodeRequestNodeListMessageAnswerHelper.php @@ -0,0 +1,103 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @todo Find an interface for hub helper + * + * 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 . + */ +class NodeRequestNodeListMessageAnswerHelper extends BaseHubAnswerHelper implements HelpableHub { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + + // Init package tags + $this->setPackageTags(array('request_node_list')); + } + + /** + * Creates the helper class + * + * @param $messageData An array with all message data + * @return $helperInstance A prepared instance of this helper + */ + public final static function createNodeRequestNodeListMessageAnswerHelper (array $messageData) { + // Get new instance + $helperInstance = new NodeRequestNodeListMessageAnswerHelper(); + + // Set session id of other peer as recipient + $helperInstance->setRecipientType($messageData[XmlRequestNodeListTemplateEngine::REQUEST_DATA_SESSION_ID]); + + // Set message data + $helperInstance->setMessageData($messageData); + + // Return the prepared instance + return $helperInstance; + } + + /** + * Loads the descriptor XML file + * + * @return void + */ + public function loadDescriptorXml () { + // Debug message + self::createDebugInstance(__CLASS__)->debugOutput('HELPER: Attempting to answer a request: node-list...'); + + // Get a XML template instance + $templateInstance = XmlTemplateEngineFactory::createXmlTemplateEngineInstance('node_request_node_list_template_class'); + + // Set it for later use + $this->setTemplateInstance($templateInstance); + + // Read the XML descriptor + $this->getTemplateInstance()->loadRequestNodeListAnswerTemplate(); + + // Render the XML content + $this->getTemplateInstance()->renderXmlContent(); + } + + /** + * Do the helped attempt by delivering a package to ourselfs + * + * @param $nodeInstance An instance of a NodeHelper class + * @return void + */ + public function sendPackage (NodeHelper $nodeInstance) { + // Sanity check: Is the node in the approx. state? (active/reachable) + $nodeInstance->getStateInstance()->validateNodeStateIsActiveOrReachable(); + + // Compile the template, this inserts the loaded node data into the gaps. + $this->getTemplateInstance()->compileTemplate(); + + // Get a singleton network package instance + $packageInstance = NetworkPackageFactory::createNetworkPackageInstance(); + + // Next, feed the content in. The network package class is a pipe-through class. + $packageInstance->enqueueRawDataFromTemplate($this, NetworkPackage::PROTOCOL_TCP); + } +} + +// [EOF] +?> -- 2.39.5