]> git.mxchange.org Git - hub.git/commitdiff
More debugging (yupp, more is required), rewrote isSocketRegistered()
authorRoland Häder <roland@mxchange.org>
Sat, 19 May 2012 15:39:22 +0000 (15:39 +0000)
committerRoland Häder <roland@mxchange.org>
Sat, 19 May 2012 15:39:22 +0000 (15:39 +0000)
application/hub/interfaces/protocol/class_ProtocolHandler.php
application/hub/main/discovery/socket/class_PackageSocketDiscovery.php
application/hub/main/handler/chunks/class_ChunkHandler.php
application/hub/main/listener/class_BaseListener.php
application/hub/main/listener/tcp/class_TcpListener.php
application/hub/main/pools/peer/class_DefaultPeerPool.php
application/hub/main/registry/socket/class_SocketRegistry.php

index ddaa43fd3b18cdf91682d9779b005cf1f453f11e..0e80f9a29d151975c3103ac692f80b0e570c72f6 100644 (file)
@@ -35,13 +35,6 @@ interface ProtocolHandler extends FrameworkInterface {
         * @return      $protocol       Used protocol
         */
        function getProtocol ();
-
-       /**
-        * Getter for "this" socket resource
-        *
-        * @return      $socketResource         A valid socket resource
-        */
-       function getSocketResource ();
 }
 
 // [EOF]
index e57ec7955568e5ea003d955f6add5326b1edab98..ef20e5c3acacf416f9ffbfd0fb1dd7329e17225f 100644 (file)
@@ -129,7 +129,11 @@ class PackageSocketDiscovery extends BaseHubDiscovery implements DiscoverableSoc
                $socketResource = $listenerInstance->getPoolInstance()->getSocketFromPackageData($packageData);
 
                // Debug message
-               //* NOISY-DEBUG: */ $this->debugOutput('socketResource=' . $socketResource . ',packageData=' . print_r($packageData, true));
+               if (is_resource($socketResource)) {
+                       //* NOISY-DEBUG: */ $this->debugOutput('socketResource[' . gettype($socketResource) . ']=' . $socketResource . ',error=' . socket_strerror(socket_last_error($socketResource)) . ',packageData=' . print_r($packageData, true));
+               } else {
+                       //* NOISY-DEBUG: */ $this->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)) {
index 033fa51afd5a0148683befcfc943740d249b6bef..f74cf99da39cc0682bdbb58b7f8f756243a4be42 100644 (file)
@@ -170,7 +170,7 @@ class ChunkHandler extends BaseHandler implements HandleableChunks, Registerable
         */
        private function isSerialNumberValid ($serialNumber) {
                // Check it
-               $isValid = ((strlen($serialNumber) == PackageFragmenter::MAX_SERIAL_LENGTH) && ($this->bigintval($serialNumber, false) === $serialNumber));
+               $isValid = ((strlen($serialNumber) == PackageFragmenter::MAX_SERIAL_LENGTH) && ($this->hexval($serialNumber, false) === $serialNumber));
 
                // Return result
                return $isValid;
@@ -444,7 +444,7 @@ class ChunkHandler extends BaseHandler implements HandleableChunks, Registerable
                // Is the serial number valid (chars 0-9, length equals PackageFragmenter::MAX_SERIAL_LENGTH)?
                if (!$this->isSerialNumberValid($chunkSplits[self::CHUNK_SPLITS_INDEX_SERIAL])) {
                        // Do some logging
-                       $this->debugOutput('CHUNK-HANDLER: Chunk serial numberfor hash ' . $chunkSplits[self::CHUNK_SPLITS_INDEX_HASH] . ' is invalid.');
+                       $this->debugOutput('CHUNK-HANDLER: Chunk serial number ' . $chunkSplits[self::CHUNK_SPLITS_INDEX_SERIAL] . ' for hash ' . $chunkSplits[self::CHUNK_SPLITS_INDEX_HASH] . ' is invalid.');
 
                        // Re-request this chunk
                        $this->rerequestChunkBySplitsArray($chunkSplits);
index 4761d8324e41fb8bc71f7e7516422a4e358be7f2..61b231e868289d425772fd763823732a6c437c6b 100644 (file)
@@ -242,6 +242,9 @@ class BaseListener extends BaseHubSystem implements Visitable {
 
                // Register the socket
                $registryInstance->registerSocket($this, $socketResource);
+
+               // And set it here
+               $this->setSocketResource($socketResource);
        }
 
        /**
@@ -261,22 +264,6 @@ class BaseListener extends BaseHubSystem implements Visitable {
                return $isRegistered;
        }
 
-       /**
-        * Getter for "this" socket resource
-        *
-        * @return      $socketResource         A valid socket resource
-        */
-       public final function getSocketResource () {
-               // Get a socket registry instance (singleton)
-               $registryInstance = SocketRegistryFactory::createSocketRegistryInstance();
-
-               // Get the socket resource
-               $socketResource = $registryInstance->getRegisteredSocketResource($this);
-
-               // Return it
-               return $socketResource;
-       }
-
        /**
         * Accepts the visitor to process the visit "request"
         *
index 731de7f9b11b05ede2a9ef2236aa6c9a996e6919..0ad6eccd683f41c5609329fbdcbfe478c35dab97 100644 (file)
@@ -230,7 +230,9 @@ class TcpListener extends BaseListener implements Listenable {
                         * and wait ...
                         */
                        $newSocket = socket_accept($this->getSocketResource());
-                       /* NOISY-DEBUG: */ $this->debugOutput('TCP-LISTENER: newSocket=' . $newSocket);
+
+                       // Debug message
+                       /* NOISY-DEBUG: */ $this->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: newSocket=' . $newSocket . ',server=' .$this->getSocketResource());
 
                        // Array for timeout settings
                        $options  = array(
@@ -299,9 +301,9 @@ class TcpListener extends BaseListener implements Listenable {
                $currentSocket = $this->getIteratorInstance()->current();
 
                // Handle it here, if not main socket
+               /* NOISY-DEBUG: */ $this->debugOutput('TCP-LISTENER: currentSocket=' . $currentSocket . ',server=' . $this->getSocketResource());
                if ($currentSocket != $this->getSocketResource()) {
                        // ... or else it will raise warnings like 'Transport endpoint is not connected'
-                       /* NOISY-DEBUG: */ $this->debugOutput('TCP-LISTENER: currentSocket=' . $currentSocket . ',server=' . $this->getSocketResource());
                        $this->getHandlerInstance()->processRawDataFromResource($currentSocket);
                } // END - if
 
index 67b02b89c5ae1a518a656e1b8aa5a9edfbe1ee1e..7d0a92ceeeb54b0cc4bd49fcfe96db2a8f91d2a4 100644 (file)
@@ -153,14 +153,14 @@ class DefaultPeerPool extends BasePool implements PoolablePeer {
                assert(count($recipientIpArray) == 2);
 
                // Debug message
-               /* NOISY-DEBUG: */ $this->debugOutput('POOL: Checking ' . count($this->getAllSockets()) . ' socket(s), recipientIpArray[0]=' . $recipientIpArray[0] . ' ...');
+               /* NOISY-DEBUG: */ $this->debugOutput('POOL: Checking ' . count($this->getAllSockets()) . ' socket(s),recipientIpArray[0]=' . $recipientIpArray[0] . ',recipientIpArray[1]=' . $recipientIpArray[1] . ' ...');
 
                // Get all sockets and check them, skip the server socket
                foreach ($this->getAllSockets() as $socket) {
                        // Is this a server socket?
                        if ($socket === $this->getListenerInstance()->getSocketResource()) {
                                // Skip 'server' sockets (local socket)
-                               /* NOISY-DEBUG: */ $this->debugOutput('POOL: Skipping local socket ' . $socket . ' ...');
+                               /* NOISY-DEBUG: */ $this->debugOutput('POOL: Skipping server socket ' . $socket . ' ...');
                                continue;
                        } // END - if
 
@@ -170,6 +170,7 @@ class DefaultPeerPool extends BasePool implements PoolablePeer {
                                $this->handleSocketError(__METHOD__, __LINE__, $socket, explode(':', $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT]));
                        } // END - if
 
+                       // Get
                        // If the "peer" IP and recipient is same, use it
                        if ($peerIp == $recipientIpArray[0]) {
                                // IPs match, so take the socket and quit this loop
index 5aa79d7e587fbaedbccdfb678b7786a266d875a2..d3c530371929eb4ca99a171a31a0022a820a5c0b 100644 (file)
@@ -64,10 +64,27 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke
         * @return      $key                            A string representation of the socket for the registry
         */
        private function getSubRegistryKey (ProtocolHandler $protocolInstance) {
+               // Default address is invalid
+               $address = '*invalid*';
+
+               // Which instance is it?
+               // @TODO Tested again base class, rewrite it to a generic interface!
+               if ($protocolInstance instanceof BaseConnectionHelper) {
+                       // Get address
+                       $address = $protocolInstance->getAddress();
+               } elseif ($protocolInstance instanceof BaseListener) {
+                       // Get listen address
+                       $address = $protocolInstance->getListenAddress();
+               } else {
+                       // Not supported!
+                       $this->debugBackTrace('Unsupported protocolInstance=' . $protocolInstance->__toString() . ' detected. Please fix this!');
+               }
+
                // Get protocol and port number and add both together
-               $key = sprintf("%s:%s:%s",
+               $key = sprintf("%s:%s:%s:%s",
                        $protocolInstance->__toString(),
                        $protocolInstance->getProtocol(),
+                       $address,
                        $protocolInstance->getPort()
                );
 
@@ -96,12 +113,18 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke
         * @return      $isRegistered           Whether the protocol is registered
         */
        private function isProtocolRegistered (ProtocolHandler $protocolInstance) {
+               // Debug message
+               //* NOISY-DEBUG: */ $this->debugOutput(__METHOD__ . ':protocol=' . $protocolInstance->getProtocol() . ' - ENTERED!');
+
                // Get the key
                $key = $this->getRegistryKeyFromProtocol($protocolInstance);
 
                // Determine it
                $isRegistered = $this->instanceExists($key);
 
+               // Debug message
+               //* NOISY-DEBUG: */ $this->debugOutput(__METHOD__ . ':protocol=' . $protocolInstance->getProtocol() . ',isRegistered=' . intval($isRegistered) . ' - EXIT!');
+
                // Return result
                return $isRegistered;
        }
@@ -115,6 +138,9 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke
         * @return      $isRegistered           Whether the given socket resource is registered
         */
        public function isSocketRegistered (ProtocolHandler $protocolInstance, $socketResource) {
+               // Debug message
+               //* NOISY-DEBUG: */ $this->debugOutput(__METHOD__ . ':protocol=' . $protocolInstance->getProtocol() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ' - ENTERED!');
+
                // Default is not registered
                $isRegistered = false;
 
@@ -123,16 +149,37 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke
                        // That one is found so "get" a registry key from it
                        $key = $this->getRegistryKeyFromProtocol($protocolInstance);
 
+                       // Debug message
+                       /* NOISY-DEBUG: */ $this->debugOutput('SOCKET-REGISTRY: protocol=' . $protocolInstance->getProtocol() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ',key=' . $key . ' - Trying to get instance ...');
+
                        // Get the registry
                        $registryInstance = $this->getInstance($key);
 
                        // "Get" a key for the socket
                        $socketKey = $this->getSubRegistryKey($protocolInstance);
 
-                       // And simply ask it
-                       $isRegistered = $registryInstance->instanceExists($socketKey);
+                       // Debug message
+                       /* NOISY-DEBUG: */ $this->debugOutput('SOCKET-REGISTRY: protocol=' . $protocolInstance->getProtocol() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ',key=' . $key . ',socketKey=' . $socketKey . ' - Checking existence ...');
+
+                       // Is it there?
+                       if ($registryInstance->instanceExists($socketKey)) {
+                               // Debug message
+                               /* NOISY-DEBUG: */ $this->debugOutput('SOCKET-REGISTRY: Found instance for socketKey=' . $socketKey . ':' . $registryInstance->getInstance($socketKey));
+
+                               // Get the instance
+                               $registeredInstance = $registryInstance->getInstance($socketKey);
+
+                               // Is it SocketContainer and same socket?
+                               $isRegistered = (($registeredInstance instanceof SocketContainer) && ($registeredInstance->ifSocketResourceMatches($socketResource)));
+
+                               // Debug message
+                               /* NOISY-DEBUG: */ $this->debugOutput('SOCKET-REGISTRY: Final result: isRegistered(' . $socketResource . ')=' . intval($isRegistered));
+                       } // END - if
                } // END - if
 
+               // Debug message
+               //* NOISY-DEBUG: */ $this->debugOutput(__METHOD__ . ':protocol=' . $protocolInstance->getProtocol() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ',isRegistered=' . intval($isRegistered) . ' - EXIT!');
+
                // Return the result
                return $isRegistered;
        }
@@ -147,6 +194,9 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke
         * @return      void
         */
        public function registerSocket (ProtocolHandler $protocolInstance, $socketResource, array $packageData = array()) {
+               // Debug message
+               //* NOISY-DEBUG: */ $this->debugOutput(__METHOD__ . ':protocol=' . $protocolInstance->getProtocol() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ' - ENTERED!');
+
                // Is the socket already registered?
                if ($this->isSocketRegistered($protocolInstance, $socketResource)) {
                        // Throw the exception
@@ -172,7 +222,7 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke
                $socketInstance = ObjectFactory::CreateObjectByConfiguredName('socket_container_class', array($socketResource, $protocolInstance, $packageData));
 
                // We have a sub-registry, the socket key and the socket, now we need to put all together
-               //* DEBUG: */ $this->debugOutput('SOCKET-REGISTRY: socketKey=' . $socketKey . ',socketResource=' . $socketResource . ' - adding socket container instance ...');
+               /* DEBUG: */ $this->debugOutput('SOCKET-REGISTRY: socketKey=' . $socketKey . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ' - adding socket container instance ...');
                $registryInstance->addInstance($socketKey, $socketInstance);
        }
 
@@ -184,8 +234,11 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke
         * @throws      NoSocketRegisteredException             If the requested socket is not registered
         */
        public function getRegisteredSocketResource (ProtocolHandler $protocolInstance) {
+               // Debug message
+               //* NOISY-DEBUG: */ $this->debugOutput(__METHOD__ . ':protocol=' . $protocolInstance->getProtocol() . ' - ENTERED!');
+
                // The socket must be registered before we can return it
-               if (!$this->isSocketRegistered($protocolInstance, false)) {
+               if (!$this->isProtocolRegistered($protocolInstance)) {
                        // Throw the exception
                        throw new NoSocketRegisteredException ($protocolInstance, self::SOCKET_NOT_REGISTERED);
                } // END - if
@@ -202,6 +255,9 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke
                // And the final socket resource
                $socketResource = $registryInstance->getInstance($socketKey)->getSocketResource();
 
+               // Debug message
+               //* NOISY-DEBUG: */ $this->debugOutput(__METHOD__ . ':protocol=' . $protocolInstance->getProtocol() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ' - EXIT!');
+
                // Return the resource
                return $socketResource;
        }