return self::$registryInstance;
}
+ /**
+ * "Getter" to get a string respresentation for a key for the sub-registry
+ * in this format: protocol:port
+ *
+ * @param $protocolInstance An instance of a ProtocolHandler class
+ * @return $key A string representation of the socket for the registry
+ */
+ private function getSubRegistryKey (ProtocolHandler $protocolInstance) {
+ // Get protocol and port number and add both together
+ $key = sprintf("%s:%s",
+ $protocolInstance->getProtocol(),
+ $protocolInstance->getPort()
+ );
+
+ // Return resulting key
+ return $key;
+ }
+
+ /**
+ * "Getter" to get a string respresentation of the protocol
+ *
+ * @param $protocolInstance An instance of a ProtocolHandler class
+ * @return $key A string representation of the protocol for the registry
+ */
+ private function getRegistryKeyFromProtocol (ProtocolHandler $protocolInstance) {
+ // Get the key
+ $key = $protocolInstance->getProtocol();
+
+ // Return resulting key
+ return $key;
+ }
+
+ /**
+ * Checks wether the given protocol is registered
+ *
+ * @param $protocolInstance An instance of a ProtocolHandler class
+ * @return $isRegistered Wether the protocol is registered
+ */
+ private function isProtocolRegistered (ProtocolHandler $protocolInstance) {
+ // Get the key
+ $key = $this->getRegistryKeyFromProtocol($protocolInstance);
+
+ // Determine it
+ $isRegistered = $this->instanceExists($key);
+
+ // Return result
+ return $isRegistered;
+ }
+
/**
* Checks wether given socket resource is registered. If $socketResource is
* false only the instance will be checked.
* @return $isRegistered Wether the given socket resource is registered
*/
public function isSocketRegistered (ProtocolHandler $protocolInstance, $socketResource) {
- $this->partialStub('Not yet implemented.');
+ // Default is not registered
+ $isRegistered = false;
+
+ // First, check for the instance, there can be only once
+ if ($this->isProtocolRegistered($protocolInstance)) {
+ // That one is found so "get" a registry key from it
+ $key = $this->getRegistryKeyFromProtocol($protocolInstance);
+
+ // 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);
+ } // END - if
+
+ // Return the result
+ return $isRegistered;
}
/**
throw new SocketAlreadyRegisteredException($protocolInstance, BaseListener::EXCEPTION_SOCKET_ALREADY_REGISTERED);
} // END - if
- $this->partialStub('Not yet implemented.');
+ // Does the instance exist?
+ if (!$this->isProtocolRegistered($protocolInstance)) {
+ // No, not found so we create a sub registry (not needed to configure!)
+ $registryInstance = SubRegistry::createSubRegistry();
+
+ // Now we can create the sub-registry for this protocol
+ $this->addInstance($this->getRegistryKeyFromProtocol($protocolInstance), $registryInstance);
+ } else {
+ // Get the sub-registry back
+ $registryInstance = $this->getInstance($this->getRegistryKeyFromProtocol($protocolInstance));
+ }
+
+ // Get a key for sub-registries
+ $socketKey = $this->getSubRegistryKey($protocolInstance);
+
+ // Get a socket container
+ $socketInstance = ObjectFactory::CreateObjectByConfiguredName('socket_container_class', array($socketResource));
+
+ // We have a sub-registry, the socket key and the socket, now we need to put all together
+ $registryInstance->addInstance($socketKey, $socketInstance);
}
/**
* @return $socketResource A valid socket resource
* @throws NoSocketRegisteredException If the requested socket is not registered
*/
- public function getSocketResource (ProtocolHandler $protocolInstance) {
+ public function getRegisteredSocketResource (ProtocolHandler $protocolInstance) {
// The socket must be registered before we can return it
if (!$this->isSocketRegistered($protocolInstance, false)) {
// Throw the exception
throw new NoSocketRegisteredException ($protocolInstance, self::SOCKET_NOT_REGISTERED);
} // END - if
- $this->partialStub('Not yet implemented.');
+ // Now get the key from the protocol
+ $key = $this->getRegistryKeyFromProtocol($protocolInstance);
+
+ // And get the registry
+ $registryInstance = $this->getInstance($key);
+
+ // Get a socket key
+ $socketKey = $this->getSubRegistryKey($protocolInstance);
+
+ // And the final socket resource
+ $socketResource = $registryInstance->getInstance($socketKey)->getSocketResource();
+
+ // Return the resource
+ return $socketResource;
}
}