X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=application%2Fhub%2Fmain%2Ffilter%2Ftags%2Fanswer%2Fclass_PackageAnnouncementAnswerTagFilter.php;h=3c9129bfb1f43e970ec353825137c56bce507c83;hb=280fca59f8ed35ddde36a794c7a9f4991911e46a;hp=12e12a0cdffae28bfe688a3db547afb27908d4ff;hpb=2ec5e34a177a926b25d70c46d965b6fcd0e5178d;p=hub.git diff --git a/application/hub/main/filter/tags/answer/class_PackageAnnouncementAnswerTagFilter.php b/application/hub/main/filter/tags/answer/class_PackageAnnouncementAnswerTagFilter.php index 12e12a0cd..3c9129bfb 100644 --- a/application/hub/main/filter/tags/answer/class_PackageAnnouncementAnswerTagFilter.php +++ b/application/hub/main/filter/tags/answer/class_PackageAnnouncementAnswerTagFilter.php @@ -2,11 +2,11 @@ /** * A AnnouncementAnswerTag filter for Package * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 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 @@ -21,12 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class PackageAnnouncementAnswerTagFilter extends BaseFilter implements FilterablePackage { - /** - * Array with all data XML nodes (which hold the actual data) and their values - */ - private $dataXmlNodes = array(); - +class PackageAnnouncementAnswerTagFilter extends BaseNodeFilter implements FilterablePackage { /** * Protected constructor * @@ -38,12 +33,12 @@ class PackageAnnouncementAnswerTagFilter extends BaseFilter implements Filterabl // Init array $this->dataXmlNodes = array( - XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP => '', - XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_IP => '', - XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS => '', - XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID => '', - XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT => 9060, - XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_UDP_PORT => 9060 + XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_ADDRESS => '', + XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_INTERNAL_ADDRESS => '', + XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_STATUS => '', + XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_NODE_ID => '', + XmlAnnouncementAnswerTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID => '', + BaseXmlAnswerTemplateEngine::ANSWER_STATUS => '', ); } @@ -77,67 +72,26 @@ class PackageAnnouncementAnswerTagFilter extends BaseFilter implements Filterabl * 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 $messageData Raw message data array * @param $packageInstance An instance of a Receivable class * @return void - * @todo Exceptions from renderXmlContent() are currently unhandled */ - public function processMessage ($messageContent, Receivable $packageInstance) { - // Debug message - /* NOISY-DEBUG: */ $this->debugOutput('ANNOUNCEMENT-ANSWER-TAG: messageContent(' . strlen($messageContent) . ')=' . $messageContent); - - // 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' - ); + public function processMessage (array $messageData, Receivable $packageInstance) { + // Process message in generic way + $this->genericProcessMessage('announcement_answer', $messageData, $packageInstance); + } - // Push the processed message back on stack - $packageInstance->getStackerInstance()->pushNamed(NetworkPackage::STACKER_NAME_PROCESSED_MESSAGE, $messageArray); + /** + * Post-processes the stacked message. Do not call popNamed() as then no + * other class can process the message. + * + * @param $packageInstance An instance of a Receivable class + * @return void + * @throws UnsupportedOperationException If this method is called, please use processMessage() instead! + */ + public function postProcessMessage (Receivable $packageInstance) { + // Please don't call this method + throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); } }