]> git.mxchange.org Git - hub.git/blobdiff - application/hub/main/handler/message-types/class_BaseMessageHandler.php
Rewrites:
[hub.git] / application / hub / main / handler / message-types / class_BaseMessageHandler.php
index b918dc1dd6358377a1431f8d70c473128dff67f8..75a7526fa8b46eb0d2f0a7d0a6cee4170098ad69 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
- * A general message handler
+ * A general message handler, this class must be abstract to make the template
+ * method pattern working.
  *
  * @author             Roland Haeder <webmaster@ship-simu.org>
  * @version            0.0.0
  * 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 BaseMessageHandler extends BaseHandler {
-       /**
-        * Array with search criteria elements
-        */
-       private $searchData = array();
-
+abstract class BaseMessageHandler extends BaseDataHandler {
        /**
         * Protected constructor
         *
@@ -36,13 +32,25 @@ class BaseMessageHandler extends BaseHandler {
        protected function __construct ($className) {
                // Call parent constructor
                parent::__construct($className);
+       }
 
-               // Init array
-               $this->searchData = array(
-                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
-                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP,
-                       XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT
-               );
+       /**
+        * "Getter" for a translated last exception as a status code
+        *
+        * @return      $statusCode             Translated status code from last exception
+        */
+       protected function getTranslatedStatusFromLastException () {
+               // Default is all fine
+               $statusCode = self::MESSAGE_STATUS_CODE_OKAY;
+
+               // Is the last exception not NULL?
+               if ($this->getLastException() instanceof FrameworkException) {
+                       // "Determine" the right status code (may differ from exception to exception)
+                       $this->debugInstance('lastException=' . $this->getLastException()->__toString() . ',message=' . $this->getLastException()->getMessage() . ' is not finished!');
+               } // END - if
+
+               // Return the status code
+               return $statusCode;
        }
 
        /**
@@ -51,38 +59,17 @@ class BaseMessageHandler extends BaseHandler {
         *
         * - session-id  (for finding the node's record together with below data)
         * - external-ip (hostname or IP number)
-        * - tcp-port    (TCP port for inbound connections)
+        * - listen-port (TCP/UDP listen port for inbound connections)
         *
         * @param       $messageArray   An array with all minimum message data
         * @return      void
         */
        protected function registerNodeByMessageData (array $messageData) {
-               // Get a wrapper instance
-               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('node_list_db_wrapper_class');
-
-               // Get a search criteria class
-               $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
-
-               // Search for the node's session id and external IP/hostname + TCP port
-               foreach ($this->searchData as $key) {
-                       // Add criteria
-                       $searchInstance->addCriteria('node_' . $key, $messageData[$key]);
-               } // END - foreach
-
-               // Only one entry is fine
-               $searchInstance->setLimit(1);
-
-               // Run the query
-               $resultInstance = $wrapperInstance->doSelectByCriteria($searchInstance);
+               // Check if searchData has entries
+               assert(count($this->getSearchData()) > 0);
 
-               // Is there already an entry?
-               if ($resultInstance->next()) {
-                       // Entry found
-                       $resultInstance->debugBackTrace('Entry found!');
-               } else {
-                       // Nothing found, so register it
-                       $wrapperInstance->registerNodeByMessageData($messageData, $this);
-               }
+               // Let the DHT facade do the work
+               $this->getDhtInstance()->registerNodeByMessageData($messageData, $this);
        }
 }