X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=application%2Fhub%2Fmain%2Fdiscovery%2Fsocket%2Fclass_PackageSocketDiscovery.php;h=981f98326306ea3ae07cf88b38829b0904e34bef;hb=2dfcc836bee4b8c5ffca689ea2446fae86f4f1e4;hp=fc496e4078e93b32e8d006243f763061c946e210;hpb=3d5f8bb2a18256dcc9a5cf07a1883260b1fc09e5;p=hub.git diff --git a/application/hub/main/discovery/socket/class_PackageSocketDiscovery.php b/application/hub/main/discovery/socket/class_PackageSocketDiscovery.php index fc496e407..981f98326 100644 --- a/application/hub/main/discovery/socket/class_PackageSocketDiscovery.php +++ b/application/hub/main/discovery/socket/class_PackageSocketDiscovery.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -57,7 +57,7 @@ class PackageSocketDiscovery extends BaseHubDiscovery implements DiscoverableSoc */ public function discoverListenerInstance ($protocolName, array $packageData) { // Debug message - //* NOISY-DEBUG: */ $this->debugOutput('SOCKET-DISCOVERY: protocolName=' . $protocolName . ' - ENTERED!'); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: protocolName=' . $protocolName . ' - ENTERED!'); /* * Get the listener pool instance, we need to lookup the matching @@ -75,17 +75,17 @@ class PackageSocketDiscovery extends BaseHubDiscovery implements DiscoverableSoc */ foreach ($poolInstance->getPoolEntriesInstance()->getArrayFromGroup($protocolName) as $listenerInstance) { // Debug output - //* NOISY-DEBUG: */ $this->debugOutput('SOCKET-DISCOVERY: protocolName=' . $protocolName . ',listenerInstance=' . $listenerInstance->__toString()); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: protocolName=' . $protocolName . ',listenerInstance=' . $listenerInstance->__toString()); // Does the listener want that package? if ($listenerInstance->ifListenerAcceptsPackageData($packageData)) { // This listener likes our package data, so abort here - //* NOISY-DEBUG: */ $this->debugOutput('SOCKET-DISCOVERY: Listener is accepting package data.'); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: Listener is accepting package data.'); break; } // END - if // Debug output - //* NOISY-DEBUG: */ $this->debugOutput('SOCKET-DISCOVERY: Listener is NOT accepting package data.'); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: Listener is NOT accepting package data.'); } // END - foreach // Return it @@ -97,14 +97,21 @@ class PackageSocketDiscovery extends BaseHubDiscovery implements DiscoverableSoc * matching socket resource for that protocol. * * @param $packageData Raw package data array + * @param $connectionType Type of connection, can be 'incoming' or 'outgoing', *NEVER* 'server'! * @return $socketResource A valid socket resource or FALSE if an error occured * @throws NoListGroupException If the procol group is not found in peer list * @throws NullPointerException If listenerInstance is NULL */ - public function discoverSocket (array $packageData) { + public function discoverSocket (array $packageData, $connectionType) { + // Assert on type + assert($connectionType != BaseConnectionHelper::CONNECTION_TYPE_SERVER); + // Determine protocol name $protocolName = $this->determineProtocolByPackageData($packageData); + // Is it the same? + assert(strtoupper($protocolName) == $packageData[NetworkPackage::PACKAGE_DATA_PROTOCOL]); + // Get the listener instance $listenerInstance = $this->discoverListenerInstance($protocolName, $packageData); @@ -114,29 +121,36 @@ class PackageSocketDiscovery extends BaseHubDiscovery implements DiscoverableSoc throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); } // END - if + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('protocolName=' . $protocolName . ',packageData=' . print_r($packageData, true)); + /* * Now we have the listener instance, we can determine the right * resource to continue. The first step is to get the attached pool * instance and pass over the whole package data to get the right * socket. */ - $socketResource = $listenerInstance->getPoolInstance()->getSocketFromPackageData($packageData); + $socketResource = $listenerInstance->getPoolInstance()->getSocketFromPackageData($packageData, $connectionType); // Debug message - //* NOISY-DEBUG: */ $this->debugOutput('socketResource=' . $socketResource . ',packageData='.print_r($packageData,true)); + if (is_resource($socketResource)) { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('socketResource[' . gettype($socketResource) . ']=' . $socketResource . ',error=' . socket_strerror(socket_last_error($socketResource)) . ',packageData=' . print_r($packageData, true)); + } else { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('socketResource[' . gettype($socketResource) . ']=' . $socketResource . ',packageData=' . print_r($packageData, true)); + } // Is it false, the recipient isn't known to us and we have no connection to it if (($socketResource === false) || (!is_resource($socketResource)) || (socket_last_error($socketResource) > 0)) { // Try to create a new socket resource try { // Possibly noisy debug message - /* NOISY-DEBUG: */ $this->debugOutput('SOCKET-DISCOVERY: Trying to establish a ' . strtoupper($protocolName) . ' connection to ' . $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT] . ' ...'); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: Trying to establish a ' . strtoupper($protocolName) . ' connection to ' . $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT] . ' ...'); // Get a socket resource from our factory (if succeeded) $socketResource = SocketFactory::createSocketFromPackageData($packageData, $protocolName); } catch (SocketConnectionException $e) { // The connection fails of being established, so log it away - $this->debugOutput('SOCKET-DISCOVERY: Caught ' . $e->__toString() . ',message=' . $e->getMessage()); + self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: Caught ' . $e->__toString() . ',message=' . $e->getMessage()); } } // END - if @@ -146,20 +160,20 @@ class PackageSocketDiscovery extends BaseHubDiscovery implements DiscoverableSoc $helperInstance = Registry::getRegistry()->getInstance('connection'); // Possibly noisy debug message - /* NOISY-DEBUG: */ $this->debugOutput('SOCKET-DISCOVERY: Going to resolve socket from peer state and given package data ...'); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: Going to resolve socket from peer state and given package data ...'); // Resolve the peer's state (but ignore return value) PeerStateResolver::resolveStateByPackage($helperInstance, $packageData, $socketResource); } catch (InvalidSocketException $e) { // This cannot be fixed, so log it away - $this->debugOutput('SOCKET-DISCOVERY: Cannot discover socket resource for recipient ' . $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT] . ': ' . $e->getMessage()); + self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: Cannot discover socket resource for recipient ' . $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT] . ': ' . $e->getMessage()); // Make any failed attempts to 'false' $socketResource = false; } // And return it - //* NOISY-DEBUG: */ $this->debugOutput('SOCKET-DISCOVERY: socketResource=' . $socketResource . ',packageData=' . print_r($packageData, true)); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SOCKET-DISCOVERY: socketResource=' . $socketResource . ',packageData=' . print_r($packageData, true)); return $socketResource; } }