From: Roland Häder Date: Tue, 27 Oct 2020 09:57:57 +0000 (+0100) Subject: Continued: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=193e9ffb443213b2ab2c814868a4fa62e1f8947f;p=hub.git Continued: - renamed packageInstance -> handlerInstance as this is no longer the package but the handler of the package - added some debug lines - 'fake' package status removed Signed-off-by: Roland Häder --- diff --git a/application/hub/classes/decoder/package/class_PackageDecoder.php b/application/hub/classes/decoder/package/class_PackageDecoder.php index 22123edc3..29f99fbd6 100644 --- a/application/hub/classes/decoder/package/class_PackageDecoder.php +++ b/application/hub/classes/decoder/package/class_PackageDecoder.php @@ -89,7 +89,7 @@ class PackageDecoder extends BaseDecoder implements Decodeable, Registerable { $unhandledDataLeft = (!$this->getHandlerInstance()->getStackInstance()->isStackEmpty(ChunkHandler::STACKER_NAME_ASSEMBLED_RAW_DATA)); // Return it - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('PACKAGE-DECODER: unhandledDataLeft=' . intval($unhandledDataLeft)); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('PACKAGE-DECODER: unhandledDataLeft=' . intval($unhandledDataLeft) . ' - EXIT!'); return $unhandledDataLeft; } @@ -100,6 +100,7 @@ class PackageDecoder extends BaseDecoder implements Decodeable, Registerable { */ public function handleRawPackageData () { // Assert on it to make sure the next popNamed() call won't throw an exception + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('PACKAGE-DECODER: CALLED!'); assert($this->ifUnhandledRawPackageDataLeft()); // "Pop" the next raw package content @@ -135,10 +136,11 @@ class PackageDecoder extends BaseDecoder implements Decodeable, Registerable { */ public function ifDeocedPackagesLeft () { // Check it ... - $ifRawPackagesLeft = (!$this->getHandlerInstance()->getStackInstance()->isStackEmpty(self::STACKER_NAME_DECODED_PACKAGE)); + $ifDecodedPackagesLeft = (!$this->getHandlerInstance()->getStackInstance()->isStackEmpty(self::STACKER_NAME_DECODED_PACKAGE)); // ... return it - return $ifRawPackagesLeft; + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('PACKAGE-DECODER: ifDecodedPackagesLeft=' . intval($ifDecodedPackagesLeft) . ' - EXIT!'); + return $ifDecodedPackagesLeft; } /** @@ -155,7 +157,7 @@ class PackageDecoder extends BaseDecoder implements Decodeable, Registerable { // Handle it //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('PACKAGE-DECODER: packageInstance=' . $packageInstance->__toString() . ')=' . print_r($packageInstance, TRUE)); - $this->getPackageHandlerInstance()->handleRawData($packageInstance); + $this->getPackageHandlerInstance()->handleReceivedPackageInstance($packageInstance); } } diff --git a/application/hub/classes/handler/package/class_NetworkPackageHandler.php b/application/hub/classes/handler/package/class_NetworkPackageHandler.php index a0f49260a..434b64839 100644 --- a/application/hub/classes/handler/package/class_NetworkPackageHandler.php +++ b/application/hub/classes/handler/package/class_NetworkPackageHandler.php @@ -85,7 +85,6 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei * 1: Raw package data * 2: Tags, seperated by semicolons, no semicolon is required if only one tag is needed * 3: Checksum - * 0 1 2 3 */ const PACKAGE_MASK = '%s%s%s%s%s%s%s'; @@ -132,7 +131,7 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei /** * Named array elements for decoded package content */ - const PACKAGE_CONTENT_EXTENSION = 'compressor'; + const PACKAGE_CONTENT_COMPRESSOR = 'compressor'; const PACKAGE_CONTENT_MESSAGE = 'message'; const PACKAGE_CONTENT_TAGS = 'tags'; const PACKAGE_CONTENT_CHECKSUM = 'checksum'; @@ -146,7 +145,6 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei const PACKAGE_STATUS_NEW = 'new'; const PACKAGE_STATUS_FAILED = 'failed'; const PACKAGE_STATUS_DECODED = 'decoded'; - const PACKAGE_STATUS_FAKED = 'faked'; /** * Constants for message data array @@ -523,7 +521,7 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei */ public function getHashFromContentSessionId (array $decodedContent, $sessionId) { // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-HANDLER: content[md5]=' . md5($decodedContent[self::PACKAGE_CONTENT_MESSAGE]) . ',sender=' . $sessionId . ',compressor=' . $decodedContent[self::PACKAGE_CONTENT_EXTENSION]); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-HANDLER: content[md5]=' . md5($decodedContent[self::PACKAGE_CONTENT_MESSAGE]) . ',sender=' . $sessionId . ',compressor=' . $decodedContent[self::PACKAGE_CONTENT_COMPRESSOR]); // Create the hash // @TODO md5() is very weak, but it needs to be fast @@ -532,7 +530,7 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei self::PACKAGE_CHECKSUM_SEPARATOR . $sessionId . self::PACKAGE_CHECKSUM_SEPARATOR . - $decodedContent[self::PACKAGE_CONTENT_EXTENSION] + $decodedContent[self::PACKAGE_CONTENT_COMPRESSOR] ); // And return it @@ -1366,7 +1364,7 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei */ public function decodeRawContent ($rawPackageContent) { // Use the separator '#' to "decode" it - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('NETWORK-PACKAGE-HANDLER: rawPackageContent()=%d - CALLED!', strlen($rawPackageContent))); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('NETWORK-PACKAGE-HANDLER: rawPackageContent(%d)=%s - CALLED!', strlen($rawPackageContent), $rawPackageContent)); $decodedArray = explode(self::PACKAGE_DATA_SEPARATOR, $rawPackageContent); // Assert on count (should be always 3) @@ -1380,6 +1378,7 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei $packageInstance->setSenderAddress($decodedArray[self::INDEX_PACKAGE_SENDER_ADDRESS]); $packageInstance->setSenderPort($decodedArray[self::INDEX_PACKAGE_SENDER_PORT]); $packageInstance->setRecipientId($decodedArray[self::INDEX_PACKAGE_RECIPIENT]); + $packageInstance->setRecipientType(self::NETWORK_TARGET_DIRECT); $packageInstance->setPackageContent($decodedArray[self::INDEX_PACKAGE_CONTENT]); $packageInstance->setStatus(self::PACKAGE_STATUS_DECODED); $packageInstance->setContentHash($decodedArray[self::INDEX_PACKAGE_HASH]); @@ -1398,7 +1397,7 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei * @return void * @throws InvalidDataChecksumException If the checksum doesn't match */ - public function handleRawData (DeliverablePackage $packageInstance) { + public function handleReceivedPackageInstance (DeliverablePackage $packageInstance) { /* * "Decode" the package's content by a simple explode() call, for * details of the array elements, see comments for constant @@ -1415,7 +1414,7 @@ class NetworkPackageHandler extends BaseHubHandler implements Deliverable, Recei */ $decodedContent = array( // Compressor's extension used to compress the data - self::PACKAGE_CONTENT_EXTENSION => $decodedContent[self::INDEX_COMPRESSOR_EXTENSION], + self::PACKAGE_CONTENT_COMPRESSOR => $decodedContent[self::INDEX_COMPRESSOR_EXTENSION], // Package data (aka "message") in BASE64-decoded form but still compressed self::PACKAGE_CONTENT_MESSAGE => base64_decode($decodedContent[self::INDEX_PACKAGE_DATA]), // Tags as an indexed array for "tagging" the message diff --git a/application/hub/classes/tasks/network/class_NetworkPackageReaderTask.php b/application/hub/classes/tasks/network/class_NetworkPackageReaderTask.php index f7a97036c..921570cde 100644 --- a/application/hub/classes/tasks/network/class_NetworkPackageReaderTask.php +++ b/application/hub/classes/tasks/network/class_NetworkPackageReaderTask.php @@ -83,30 +83,21 @@ class NetworkPackageReaderTask extends BaseHubTask implements Taskable, Visitabl * @return void */ public function executeTask () { - // Trace message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: CALLED!'); - // Get package instance - $packageInstance = NetworkPackageHandlerFactory::createNetworkPackageHandlerInstance(); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('NETWORK-PACKAGE-READER-TASK: packageInstance=%s', $packageInstance->__toString())); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: CALLED!'); + $handlerInstance = NetworkPackageHandlerFactory::createNetworkPackageHandlerInstance(); // Do we have something to handle? - if ($packageInstance->isProcessedMessagePending()) { - // Trace message - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling packageInstance->handleProcessedMessage() ...'); - + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('NETWORK-PACKAGE-READER-TASK: handlerInstance=%s', $handlerInstance->__toString())); + if ($handlerInstance->isProcessedMessagePending()) { /* * A previously proccessed message is waiting for being * "interpreted". This is done by trying to find a configuration * entry based on 'message_type' element. */ - $packageInstance->handleProcessedMessage(); - } elseif ($packageInstance->isNewMessageArrived()) { - // Trace message - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling packageInstance->handleNewlyArrivedMessage() ...'); - + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling handlerInstance->handleProcessedMessage() ...'); + $handlerInstance->handleProcessedMessage(); + } elseif ($handlerInstance->isNewMessageArrived()) { /* * A fully "decoded" message has been received and added for being * processed. Processing a message should not take long, so mostly @@ -114,37 +105,31 @@ class NetworkPackageReaderTask extends BaseHubTask implements Taskable, Visitabl * as "XML variables" from the content (which must be a well-formed * XML) and then pushing it on the next stack "processed messages". */ - $packageInstance->handleNewlyArrivedMessage(); - } elseif ($packageInstance->isIncomingRawDataHandled()) { - // Trace message - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling packageInstance->assembleDecodedDataToPackage() ...'); - + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling handlerInstance->handleNewlyArrivedMessage() ...'); + $handlerInstance->handleNewlyArrivedMessage(); + } elseif ($handlerInstance->isIncomingRawDataHandled()) { /* * Incoming decoded data has been handled (see below) so it needs to - * be assembled back to a "package array". Please see NetworkPackage - * for further details (what array elements are required et cetera). + * be assembled back to a package data instance. Please see + * PackageData for further details (what array elements are + * required et cetera). */ - $packageInstance->assembleDecodedDataToPackage(); - } elseif ($packageInstance->ifMultipleMessagesPending()) { - // Trace message - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling packageInstance->handleMultipleMessages() ...'); - + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling handlerInstance->assembleDecodedDataToPackage() ...'); + $handlerInstance->assembleDecodedDataToPackage(); + } elseif ($handlerInstance->ifMultipleMessagesPending()) { /* * Some raw data contained multiple messages which where now splitted. */ - $packageInstance->handleMultipleMessages(); - } elseif ($packageInstance->isNewRawDataPending()) { - // Trace message - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling packageInstance->handleIncomingDecodedData() ...'); - + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling handlerInstance->handleMultipleMessages() ...'); + $handlerInstance->handleMultipleMessages(); + } elseif ($handlerInstance->isNewRawDataPending()) { // Raw, decoded data has been received - $packageInstance->handleIncomingDecodedData(); - } elseif ($packageInstance->ifAssemblerHasPendingDataLeft()) { - // Trace message - /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling packageInstance->handleAssemblerPendingData() ...'); - + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling handlerInstance->handleIncomingDecodedData() ...'); + $handlerInstance->handleIncomingDecodedData(); + } elseif ($handlerInstance->ifAssemblerHasPendingDataLeft()) { // Handle any pending data from the package assembler - $packageInstance->handleAssemblerPendingData(); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('NETWORK-PACKAGE-READER-TASK: Calling handlerInstance->handleAssemblerPendingData() ...'); + $handlerInstance->handleAssemblerPendingData(); } // Trace message diff --git a/application/hub/classes/tasks/node/decoder/class_NodePackageDecoderTask.php b/application/hub/classes/tasks/node/decoder/class_NodePackageDecoderTask.php index 399a9131a..6b18235a1 100644 --- a/application/hub/classes/tasks/node/decoder/class_NodePackageDecoderTask.php +++ b/application/hub/classes/tasks/node/decoder/class_NodePackageDecoderTask.php @@ -79,12 +79,12 @@ class NodePackageDecoderTask extends BaseHubTask implements Taskable, Visitable $decoderInstance = DecoderFactory::createPackageDecoderInstance(); // Check if the stacker has some entries left - if ($decoderInstance->ifUnhandledRawPackageDataLeft()) { - // Then handle it - $decoderInstance->handleRawPackageData(); - } elseif ($decoderInstance->ifDeocedPackagesLeft()) { - // Some decoded packages have arrived (for this peer) + if ($decoderInstance->ifDeocedPackagesLeft()) { + // Some decoded packages have arrived (for this node) $decoderInstance->handleDecodedPackage(); + } elseif ($decoderInstance->ifUnhandledRawPackageDataLeft()) { + // Handle raw data as last option to prevent that the stack runs full + $decoderInstance->handleRawPackageData(); } } diff --git a/application/hub/interfaces/receiver/class_Receivable.php b/application/hub/interfaces/receiver/class_Receivable.php index 70ee6a2e5..df10735e0 100644 --- a/application/hub/interfaces/receiver/class_Receivable.php +++ b/application/hub/interfaces/receiver/class_Receivable.php @@ -124,12 +124,12 @@ interface Receivable extends HubInterface { function handleAssemblerPendingData (); /** - * Handles decoded data for this node + * Handles received package instance * * @param $packageInstance An instance of a DeliverablePackage class * @return void */ - function handleRawData (DeliverablePackage $packageInstance); + function handleReceivedPackageInstance (DeliverablePackage $packageInstance); /** * Checks whether the assembler has multiple messages pending