]> git.mxchange.org Git - hub.git/commitdiff
Message helper for receiving announcement answers added (not fully finished, the...
authorRoland Häder <roland@mxchange.org>
Sun, 20 May 2012 12:04:26 +0000 (12:04 +0000)
committerRoland Häder <roland@mxchange.org>
Sun, 20 May 2012 12:04:26 +0000 (12:04 +0000)
.gitattributes
application/hub/config.php
application/hub/main/filter/tags/answer/.htaccess [new file with mode: 0644]
application/hub/main/filter/tags/answer/class_PackageAnnouncementAnswerTagFilter.php [new file with mode: 0644]
application/hub/main/filter/tags/class_PackageAnnouncementTagFilter.php
application/hub/main/helper/hub/answer/announcement/class_NodeAnnouncementMessageAnswerHelper.php

index ffa130e516f138fe1c37f4244914219d179d2e97..8ae28acf3553ef47e54a8cf35273e3c5c7088cbd 100644 (file)
@@ -284,6 +284,8 @@ application/hub/main/filter/shutdown/node/class_NodeShutdownFlushNodeListFilter.
 application/hub/main/filter/shutdown/node/class_NodeShutdownNodeFilter.php svneol=native#text/plain
 application/hub/main/filter/shutdown/node/class_NodeShutdownTaskHandlerFilter.php svneol=native#text/plain
 application/hub/main/filter/tags/.htaccess -text svneol=unset#text/plain
+application/hub/main/filter/tags/answer/.htaccess -text svneol=unset#text/plain
+application/hub/main/filter/tags/answer/class_PackageAnnouncementAnswerTagFilter.php svneol=native#text/plain
 application/hub/main/filter/tags/class_PackageAnnouncementTagFilter.php svneol=native#text/plain
 application/hub/main/filter/tags/class_PackageSelfConnectTagFilter.php svneol=native#text/plain
 application/hub/main/filter/task/.htaccess -text svneol=unset#text/plain
index 2be81a813d50c5161ae0fbdcfd1cb938e82796d1..1cf9c0b8d69c1f335552b8ba9cde9527e0709ae6 100644 (file)
@@ -201,6 +201,9 @@ $cfg->setConfigEntry('package_filter_chain_class', 'PackageFilterChain');
 // CFG: PACKAGE-TAG-ANNOUNCEMENT-FILTER
 $cfg->setConfigEntry('package_tag_announcement_filter', 'PackageAnnouncementTagFilter');
 
+// CFG: PACKAGE-TAG-ANNOUNCEMENT-ANSWER-FILTER
+$cfg->setConfigEntry('package_tag_announcement_answer_filter', 'PackageAnnouncementAnswerTagFilter');
+
 // CFG: PACKAGE-TAG-SELF-CONNECT-FILTER
 $cfg->setConfigEntry('package_tag_self_connect_filter', 'PackageSelfConnectTagFilter');
 
@@ -219,8 +222,8 @@ $cfg->setConfigEntry('news_reader_class', 'ConsoleNewsReader');
 // CFG: NODE-ANNOUNCEMENT-TEMPLATE-CLASS
 $cfg->setConfigEntry('node_announcement_template_class', 'XmlAnnouncementTemplateEngine');
 
-// CFG: NODE-ANSWER-ANNOUNCEMENT-TEMPLATE-CLASS
-$cfg->setConfigEntry('node_answer_announcement_template_class', 'XmlAnnouncementAnswerTemplateEngine');
+// CFG: NODE-ANNOUNCEMENT-ANSWER-TEMPLATE-CLASS
+$cfg->setConfigEntry('node_announcement_answer_template_class', 'XmlAnnouncementAnswerTemplateEngine');
 
 // CFG: NODE-MESSAGE-TEMPLATE-EXTENSION
 $cfg->setConfigEntry('node_message_template_extension', '.xml');
diff --git a/application/hub/main/filter/tags/answer/.htaccess b/application/hub/main/filter/tags/answer/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/hub/main/filter/tags/answer/class_PackageAnnouncementAnswerTagFilter.php b/application/hub/main/filter/tags/answer/class_PackageAnnouncementAnswerTagFilter.php
new file mode 100644 (file)
index 0000000..43d5df3
--- /dev/null
@@ -0,0 +1,142 @@
+<?php
+/**
+ * A AnnouncementAnswerTag filter for Package
+ *
+ * @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 PackageAnnouncementAnswerTagFilter extends BaseFilter implements FilterablePackage {
+       /**
+        * Array with all data XML nodes (which hold the actual data) and their values
+        */
+       private $dataXmlNodes = array();
+
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+
+               // Init array
+               $this->dataXmlNodes = array(
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP => '',
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP => '',
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS => '',
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID  => '',
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT    => 9060,
+                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT    => 9060
+               );
+       }
+
+       /**
+        * Creates an instance of this filter class
+        *
+        * @return      $filterInstance         An instance of this filter class
+        */
+       public final static function createPackageAnnouncementAnswerTagFilter () {
+               // Get a new instance
+               $filterInstance = new PackageAnnouncementAnswerTagFilter();
+
+               // Return the instance
+               return $filterInstance;
+       }
+
+       /**
+        * Executes the filter with given request and response objects
+        *
+        * @param       $requestInstance        An instance of a class with an Requestable interface
+        * @param       $responseInstance       An instance of a class with an Responseable interface
+        * @return      void
+        * @throws      UnsupportedOperationException   If this method is called, please use processMessage() instead!
+        */
+       public function execute (Requestable $requestInstance, Responseable $responseInstance) {
+               // Please don't call this method
+               throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION);
+       }
+
+       /**
+        * Processes the given raw message content. The method renderXmlContent
+        * may throw (not the method itself) several exceptions:
+        *
+        * InvalidXmlNodeException  - If an invalid XML node has been found (e.g.
+        *                            wrong/out-dated template used)
+        * XmlNodeMismatchException - Again might be caused by invalid XML node
+        *                            usage
+        * XmlParserException       - If the XML message is damaged or not
+        *                            well-formed
+        *
+        * @param       $messageContent         Raw message content
+        * @param       $packageInstance        An instance of a Receivable class
+        * @return      void
+        * @todo        Exceptions from renderXmlContent() are currently unhandled
+        */
+       public function processMessage ($messageContent, Receivable $packageInstance) {
+               // Get a template instance from the factory
+               $templateInstance = XmlTemplateEngineFactory::createXmlTemplateEngineInstance('node_announcement_answer_template_class');
+
+               // And render the XML content (aka message)
+               $templateInstance->renderXmlContent($messageContent);
+
+               /*
+                * The template system now stores all required data as 'general'
+                * variables, so simply get them. If there is an invalid XML node
+                * inside the message, the above method call will cause exceptions.
+                */
+               foreach ($this->dataXmlNodes as $key => $dummy) {
+                       // Get the variable from template engine
+                       $value = $templateInstance->readAnnouncementAnswerData($key);
+
+                       /*
+                        * If value is NULL, a variable hasn't been found. This could mean
+                        * that *this* node is running an out-dated software or the other
+                        * peer is using an out-dated announcement_answer.xml template.
+                        */
+                       if (is_null($value)) {
+                               // Output a warning
+                               $this->debugOutput('ANNOUNCEMENT-ANSWER-TAG: Found not fully supported variable ' . $key . ' - skipping.');
+
+                               // Skip this part, don't write NULLs to the array
+                               continue;
+                       } // END - if
+
+                       // Debug message
+                       /* NOISY-DEBUG: */ $this->debugOutput('ANNOUNCEMENT-TAG-ANSWER: key=' . $key . ',value=' . $value);
+
+                       // Set it now
+                       $this->dataXmlNodes[$key] = $value;
+               } // END - foreach
+
+               // Construct an array for pushing it on next stack
+               $messageArray = array(
+                       // Message data itself
+                       NetworkPackage::MESSAGE_ARRAY_DATA => $this->dataXmlNodes,
+                       // Message type (which is 'announcement')
+                       NetworkPackage::MESSAGE_ARRAY_TYPE => 'announcement_answer'
+               );
+
+               // Push the processed message back on stack
+               $packageInstance->getStackerInstance()->pushNamed(NetworkPackage::STACKER_NAME_PROCESSED_MESSAGE, $messageArray);
+       }
+}
+
+// [EOF]
+?>
index 426664dc53d6a62df650782348f4eec4d58e08fe..eb9e5337ee8ddeaadf9d90295af32b3b5865c484 100644 (file)
@@ -119,7 +119,7 @@ class PackageAnnouncementTagFilter extends BaseFilter implements FilterablePacka
                        } // END - if
 
                        // Debug message
-                       $this->debugOutput('ANNOUNCEMENT-TAG: key=' . $key . ',value=' . $value);
+                       /* NOISY-DEBUG: */ $this->debugOutput('ANNOUNCEMENT-TAG: key=' . $key . ',value=' . $value);
 
                        // Set it now
                        $this->dataXmlNodes[$key] = $value;
index e174be152f64a2773396109d8d2e77cca8c92328..a02daae188e8249f967c7735e70579182231d21f 100644 (file)
@@ -66,7 +66,7 @@ class NodeAnnouncementMessageAnswerHelper extends BaseHubAnswerHelper implements
                $this->debugOutput('HELPER: Attempting to answer an announcement...');
 
                // Get a XML template instance
-               $templateInstance = XmlTemplateEngineFactory::createXmlTemplateEngineInstance('node_answer_announcement_template_class');
+               $templateInstance = XmlTemplateEngineFactory::createXmlTemplateEngineInstance('node_announcement_answer_template_class');
 
                // Set it for later use
                $this->setTemplateInstance($templateInstance);