X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=application%2Fhub%2Fmain%2Fhandler%2Fnetwork%2Ftcp%2Fclass_TcpNetworkPackageHandler.php;h=7b644f83bc754286c5d4f0d95680672ddf836081;hb=69e7b3de7c369cd0ddc74c75d319055cbf4a3a04;hp=c42684b1fd5d8e476a677f3cadfb6b6910809aae;hpb=c2c103ba61ec1462e2ef69a3f144ecfe6aeb4ebd;p=hub.git diff --git a/application/hub/main/handler/network/tcp/class_TcpNetworkPackageHandler.php b/application/hub/main/handler/network/tcp/class_TcpNetworkPackageHandler.php index c42684b1f..7b644f83b 100644 --- a/application/hub/main/handler/network/tcp/class_TcpNetworkPackageHandler.php +++ b/application/hub/main/handler/network/tcp/class_TcpNetworkPackageHandler.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Hub Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Hub Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -30,37 +30,32 @@ class TcpNetworkPackageHandler extends BaseNetworkPackageHandler implements Netw protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); + + // Set handler name + $this->setHandlerName('tcp'); } /** * Creates an instance of this class * - * @return $handlerInstance An instance of a Networkable class + * @return $handlerInstance An instance of a Networkable class */ - public final static function createTcpNetworkPackageHandler () { + public static final function createTcpNetworkPackageHandler () { // Get new instance $handlerInstance = new TcpNetworkPackageHandler(); - // Initialize new resolver instance - $resolverInstance = ObjectFactory::createObjectByConfiguredName('network_state_resolver_class'); - - // Set it in this class - $handlerInstance->setResolverInstance($resolverInstance); - // Return the prepared instance return $handlerInstance; } /** - * Processes a package from given resource. This is mostly useful for TCP + * Processes raw data from given resource. This is mostly useful for TCP * package handling and is implemented in the TcpListener class * * @param $resource A valid resource identifier * @return void - * @throws InvalidResourceException If the given resource is invalid - * @todo 0% */ - public function processResourcePackage ($resource) { + public function processResourceRawData ($resource) { // Check the resource if (!is_resource($resource)) { // Throw an exception @@ -71,10 +66,17 @@ class TcpNetworkPackageHandler extends BaseNetworkPackageHandler implements Netw $this->setErrorCode(self::SOCKET_ERROR_UNHANDLED); // Debug message - $this->debugOutput('HANDLER: Handling TCP package from client ' . $resource); + //* NOISY-DEBUG: */ $this->debugOutput('HANDLER: Handling TCP package from peer ' . $resource); - // Read the raw data from socket - $rawData = socket_read($resource, 1500, PHP_NORMAL_READ); + /* + * Read the raw data from socket. If you change PHP_BINARY_READ to + * PHP_NORMAL_READ, this line will endless block. We only have + * simultanous threads and no real threads. + */ + $rawData = socket_read($resource, $this->getConfigInstance()->getConfigEntry('tcp_buffer_length'), PHP_BINARY_READ); + + // Debug output of read data length + //* NOISY-DEBUG: */ $this->debugOutput('LISTENER: rawData[]=' . strlen($rawData)); // Is it valid? if (($rawData === false) || (socket_last_error($resource) > 0)) { @@ -83,16 +85,15 @@ class TcpNetworkPackageHandler extends BaseNetworkPackageHandler implements Netw } elseif (empty($rawData)) { // The peer did send nothing to us $this->setErrorCode(self::SOCKET_ERROR_EMPTY_DATA); - } elseif (!$this->isPackageDataValid($rawData)) { - // Invalid package data - $this->setErrorCode(self::PACKAGE_ERROR_INVALID_DATA); } else { - // Low-level checks are all green - $this->setErrorCode(self::PACKAGE_LEVEL_CHECK_OKAY); - } + // Low-level checks of the raw data went all fine, we can now decode the raw data + $decodedData = $this->getInputStreamInstance()->streamData($rawData); - // Get a state from the resolver for this package - $stateInstance = $this->getResolverInstance()->resolveStateByPackage($this, $rawData); + // Is the decoded data false, then streamData() could not validate it + if ($decodedData !== false) { + die('decodedData(' . strlen($decodedData) . ')=' . $decodedData . "\n"); + } // END - if + } } }