]> git.mxchange.org Git - hub.git/commitdiff
Added a stacker for chunk handler which handles final chunks, implemented adding...
authorRoland Häder <roland@mxchange.org>
Wed, 15 Feb 2012 22:57:36 +0000 (22:57 +0000)
committerRoland Häder <roland@mxchange.org>
Wed, 15 Feb 2012 22:57:36 +0000 (22:57 +0000)
application/hub/config.php
application/hub/main/handler/chunks/class_ChunkHandler.php
application/hub/main/pools/peer/class_DefaultPeerPool.php

index 09d31a7936f2776a51fa15f1c0e2beb1f4bffb52..4c60d5ea9cd9cdcb13e719d8e4f471d2f195f615 100644 (file)
@@ -246,6 +246,9 @@ $cfg->setConfigEntry('network_package_stacker_class', 'FiFoStacker');
 // CFG: NODE-RAW-DATA-STACKER-CLASS
 $cfg->setConfigEntry('node_raw_data_stacker_class', 'FiFoStacker');
 
+// CFG: CHUNK-HANDLER-STACKER-CLASS
+$cfg->setConfigEntry('chunk_handler_stacker_class', 'FiFoStacker');
+
 // CFG: PRODUCER-OUTGOING-QUEUE
 $cfg->setConfigEntry('producer_outgoing_queue', 'FiFoStacker');
 
@@ -294,6 +297,9 @@ $cfg->setConfigEntry('stacker_package_decoded_data_max_size', 200);
 // CFG: STACKER-PACKAGE-HANDLED-DECODED-MAX-SIZE
 $cfg->setConfigEntry('stacker_package_handled_decoded_max_size', 200);
 
+// CFG: STACKER-FINAL-CHUNKS-MAX-SIZE
+$cfg->setConfigEntry('stacker_final_chunks_max_size', 100);
+
 // CFG: NEWS-MAIN-LIMIT
 $cfg->setConfigEntry('news_main_limit', 5);
 
index 100fab1a446ed9a892f0fb10009808e795950a01..456f1ea08e34ab906a5c1f47c11ad0fe5e696614 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 class ChunkHandler extends BaseHandler implements Registerable {
+       /**
+        * Stacker for chunks with final EOP
+        */
+       const STACKER_NAME_CHUNKS_WITH_FINAL_EOP = 'final_chunks';
+
        /**
         * Protected constructor
         *
@@ -33,6 +38,15 @@ class ChunkHandler extends BaseHandler implements Registerable {
 
                // Set handler name
                $this->setHandlerName('chunk');
+
+               // Get a FIFO stacker
+               $stackerInstance = ObjectFactory::createObjectByConfiguredName('chunk_handler_stacker_class');
+
+               // Init all stacker
+               $stackerInstance->initStacker(self::STACKER_NAME_CHUNKS_WITH_FINAL_EOP);
+
+               // Set the stacker in this handler
+               $this->setStackerInstance($stackerInstance);
        }
 
        /**
@@ -62,8 +76,11 @@ class ChunkHandler extends BaseHandler implements Registerable {
                        throw new FinalChunkVerificationException(array($this, $chunks), BaseListener::EXCEPTION_FINAL_CHUNK_VERIFICATION);
                } // END - if
 
-               // Not yet finished
-               $this->partialStub('Not yet implemented.');
+               // Add all chunks to the FIFO stacker
+               foreach ($chunk as $chunk) {
+                       // Add the chunk
+                       $this->getStackerInstance()->pushNamed(self::STACKER_NAME_CHUNKS_WITH_FINAL_EOP, $chunk);
+               } // END - foreach
        }
 }
 
index b5fd4a94582388f27ab8b56cf91335dbd3022267..3e469aecc2b8bef117895fedc8bee27521566dbd 100644 (file)
@@ -153,7 +153,7 @@ class DefaultPeerPool extends BasePool implements PoolablePeer {
                foreach ($this->getAllSockets() as $socket) {
                        // Is this a server socket?
                        if ($socket === $this->getListenerInstance()->getSocketResource()) {
-                               // Skip this
+                               // Skip 'server' sockets (local socket)
                                continue;
                        } // END - if