]> git.mxchange.org Git - hub.git/blobdiff - application/hub/main/handler/network/class_BaseRawDataHandler.php
Refactured handling of socket errors, old code is commeted out and will be removed...
[hub.git] / application / hub / main / handler / network / class_BaseRawDataHandler.php
index 71c15525bad437c1c35dbc5c5012e66baa8ecc7a..50710956e097035576eb12a588ce0dd41c9830db 100644 (file)
 class BaseRawDataHandler extends BaseHandler {
        // Error codes:
        // - 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)
+       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)
+       const SOCKET_ERROR_CONNECTION_REFUSED     = 'connection_refused';   // The name says it: connection refused
+       const SOCKET_ERROR_CONNECTION_TIMED_OUT   = 'connection_timed_out'; // The name says it: connection attempt has timed-out
+       const SOCKET_CONNECTED                    = 'connected';            // Nothing errorous happens, socket is connected
 
        // - Package errors
        const PACKAGE_ERROR_INVALID_DATA       = 'invalid_data';    // Invalid data in package found
@@ -42,6 +45,11 @@ class BaseRawDataHandler extends BaseHandler {
        const PACKAGE_DECODED_DATA = 'decoded_data';
        const PACKAGE_ERROR_CODE   = 'error_code';
 
+       /**
+        * Stacker for decoded data
+        */
+       const STACKER_NAME_DECODED_DATA = 'decoded_data';
+
        /**
         * Error code from socket
         */
@@ -82,7 +90,7 @@ class BaseRawDataHandler extends BaseHandler {
         * @return      void
         */
        protected function initStacker () {
-               $this->getStackerInstance()->initStacker('raw_data');
+               $this->getStackerInstance()->initStacker(self::STACKER_NAME_DECODED_DATA);
        }
 
        /**
@@ -96,12 +104,38 @@ class BaseRawDataHandler extends BaseHandler {
                 * 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('raw_data', array(
+               $this->getStackerInstance()->pushNamed(self::STACKER_NAME_DECODED_DATA, array(
                        self::PACKAGE_DECODED_DATA => $decodedData,
                        self::PACKAGE_ERROR_CODE   => $this->getErrorCode()
                ));
        }
 
+       /**
+        * Checks wether decoded data is pending for further processing.
+        *
+        * @return      $isPending      Wether decoded data is pending
+        */
+       public function isDecodedDataPending () {
+               // Does the stacker have some entries (not empty)?
+               $isPending = (!$this->getStackerInstance()->isStackEmpty(self::STACKER_NAME_DECODED_DATA));
+
+               // Return it
+               return $isPending;
+       }
+
+       /**
+        * "Getter" for next decoded data from the stacker
+        *
+        * @return      $decodedData    Decoded data from the stacker
+        */
+       public function getNextDecodedData () {
+               // "Pop" the decoded data from the stacker
+               $decodedData = $this->getStackerInstance()->popNamed(self::STACKER_NAME_DECODED_DATA);
+
+               // And return it
+               return $decodedData;
+       }
+
        /**
         * Checks wether the 'recipient' field matches our own address:port
         * combination.
@@ -116,7 +150,7 @@ class BaseRawDataHandler extends BaseHandler {
 
                // Does it match?
                // @TODO Numeric or alpha-numeric index?
-               $matches = ($ownAddress === $packageData[NetworkPackage::INDEX_PACKAGE_RECIPIENT]);
+               $matches = ($ownAddress === $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT]);
 
                // Return result
                return $matches;