]> git.mxchange.org Git - hub.git/blobdiff - application/hub/main/handler/network/class_BaseRawDataHandler.php
Continued with hub:
[hub.git] / application / hub / main / handler / network / class_BaseRawDataHandler.php
index 1fc3cde761916ec7d81a6371e9bb5f39cc73ff95..9f8c9cbf7f233f1e22392803d3353ea0266d72e7 100644 (file)
@@ -2,11 +2,11 @@
 /**
  * A general Handler for raw data from sockets
  *
- * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @author             Roland Haeder <webmaster@shipsimu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2014 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
@@ -26,7 +26,6 @@ class BaseRawDataHandler extends BaseHandler {
        // - Socket raw data stream errors
        const SOCKET_ERROR_UNKNOWN                    = 'unknown_error';              // Unknown error (should not happen)
        const SOCKET_ERROR_TRANSPORT_ENDPOINT         = 'transport_endpoint';         // Transport endpoint has closed
-       const SOCKET_ERROR_EMPTY_DATA                 = 'empty_data';                 // Other peer has sent nothing
        const SOCKET_ERROR_INVALID_BASE64_MODULO      = 'base64_modulo';              // Length is not modulo 4
        const SOCKET_ERROR_INVALID_BASE64_MESSAGE     = 'base64_message';             // Raw data is not Base64-encoded
        const SOCKET_ERROR_UNHANDLED                  = 'unhandled_package';          // Unhandled raw data (not bad)
@@ -36,6 +35,8 @@ class BaseRawDataHandler extends BaseHandler {
        const SOCKET_ERROR_OPERATION_ALREADY_PROGRESS = 'operation_already_progress'; // 'Operation already in progress'
        const SOCKET_ERROR_RESOURCE_UNAVAILABLE       = 'resource_unavailable';       // 'Resource temporary unavailable'
        const SOCKET_ERROR_NO_ROUTE_TO_HOST           = 'no_route_to_host';           // The name says it: no route to host
+       const SOCKET_ERROR_CONNECTION_RESET_BY_PEER   = 'connection_reset_by_peer';   // Connection reset by peer
+       const SOCKET_ERROR_BROKEN_PIPE                = 'broken_pipe';                // Broken pipe
        const SOCKET_CONNECTED                        = 'connected';                  // Nothing errorous happens, socket is connected
 
        // - Package errors
@@ -46,13 +47,17 @@ class BaseRawDataHandler extends BaseHandler {
        const PACKAGE_LEVEL_CHECK_OKAY         = 'checked_package'; // Package is fine
 
        // Package data
-       const PACKAGE_DECODED_DATA = 'decoded_data';
-       const PACKAGE_ERROR_CODE   = 'error_code';
+       const PACKAGE_RAW_DATA   = 'raw_data';
+       const PACKAGE_ERROR_CODE = 'error_code';
+
+       // Start/end marker
+       const STREAM_START_MARKER = '[[S]]';
+       const STREAM_END_MARKER   = '[[E]]';
 
        /**
-        * Stacker for decoded data
+        * Stacker for raw data
         */
-       const STACKER_NAME_DECODED_DATA = 'decoded_data';
+       const STACKER_NAME_RAW_DATA = 'raw_data';
 
        /**
         * Error code from socket
@@ -72,20 +77,14 @@ class BaseRawDataHandler extends BaseHandler {
                // Set error code to 'unknown'
                $this->setErrorCode(self::SOCKET_ERROR_UNKNOWN);
 
-               // Get an input stream instance
-               $streamInstance = ObjectFactory::createObjectByConfiguredName('node_raw_data_input_stream_class', array($this));
-
-               // Set it in this network-package handler
-               $this->setInputStreamInstance($streamInstance);
-
                // Init stacker instance for processed raw data
-               $stackerInstance = ObjectFactory::createObjectByConfiguredName('node_raw_data_stacker_class');
+               $stackInstance = ObjectFactory::createObjectByConfiguredName('node_raw_data_stacker_class');
 
                // Remember this in this package handler
-               $this->setStackerInstance($stackerInstance);
+               $this->setStackInstance($stackInstance);
 
                // Init stacker
-               $this->initStacker();
+               $this->initStack();
        }
 
        /**
@@ -93,51 +92,51 @@ class BaseRawDataHandler extends BaseHandler {
         *
         * @return      void
         */
-       protected function initStacker () {
-               $this->getStackerInstance()->initStacker(self::STACKER_NAME_DECODED_DATA);
+       protected function initStack () {
+               $this->getStackInstance()->initStack(self::STACKER_NAME_RAW_DATA);
        }
 
        /**
-        * Adds given decoded data to the raw data stacker
+        * Adds given raw data to the raw data stacker
         *
-        * @param       $decodedData    Decoded data from the socket resource
+        * @param       $rawData        raw data from the socket resource
         * @return      void
         */
-       protected function addDecodedDataToStacker ($decodedData) {
+       protected function addRawDataToStacker ($rawData) {
                /*
                 * Add the deocoded data and error code to the stacker so other classes
                 * (e.g. NetworkPackage) can "pop" it from the stacker.
                 */
-               $this->getStackerInstance()->pushNamed(self::STACKER_NAME_DECODED_DATA, array(
-                       self::PACKAGE_DECODED_DATA => $decodedData,
-                       self::PACKAGE_ERROR_CODE   => $this->getErrorCode()
+               $this->getStackInstance()->pushNamed(self::STACKER_NAME_RAW_DATA, array(
+                       self::PACKAGE_RAW_DATA   => $rawData,
+                       self::PACKAGE_ERROR_CODE => $this->getErrorCode()
                ));
        }
 
        /**
-        * Checks whether decoded data is pending for further processing.
+        * Checks whether raw data is pending for further processing.
         *
-        * @return      $isPending      Whether decoded data is pending
+        * @return      $isPending      Whether raw data is pending
         */
-       public function isDecodedDataPending () {
+       public function isRawDataPending () {
                // Does the stacker have some entries (not empty)?
-               $isPending = (!$this->getStackerInstance()->isStackEmpty(self::STACKER_NAME_DECODED_DATA));
+               $isPending = (!$this->getStackInstance()->isStackEmpty(self::STACKER_NAME_RAW_DATA));
 
                // Return it
                return $isPending;
        }
 
        /**
-        * "Getter" for next decoded data from the stacker
+        * "Getter" for next raw data from the stacker
         *
-        * @return      $decodedData    Decoded data from the stacker
+        * @return      $rawData        Raw data from the stacker
         */
-       public function getNextDecodedData () {
-               // "Pop" the decoded data from the stacker
-               $decodedData = $this->getStackerInstance()->popNamed(self::STACKER_NAME_DECODED_DATA);
+       public function getNextRawData () {
+               // "Pop" the raw data from the stacker
+               $rawData = $this->getStackInstance()->popNamed(self::STACKER_NAME_RAW_DATA);
 
                // And return it
-               return $decodedData;
+               return $rawData;
        }
 
        /**
@@ -150,7 +149,7 @@ class BaseRawDataHandler extends BaseHandler {
         */
        protected function ifRecipientMatchesOwnAddress (array $packageData) {
                // Construct own address first
-               $ownAddress = Registry::getRegistry()->getInstance('node')->getAddressPort($this);
+               $ownAddress = NodeObjectFactory::createNodeInstance()->getAddressPort();
 
                // Does it match?
                $matches = ($ownAddress === $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT]);