From: Roland Häder Date: Sat, 22 May 2010 15:59:46 +0000 (+0000) Subject: Moved socket registry to hub project, extended socket container with more parameters X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=18fd6edc11a36a3e52870f1946499e448a863ea7;p=core.git Moved socket registry to hub project, extended socket container with more parameters --- diff --git a/.gitattributes b/.gitattributes index bc3380a3..8ea22955 100644 --- a/.gitattributes +++ b/.gitattributes @@ -445,7 +445,6 @@ inc/classes/main/registration/class_BaseRegistration.php -text inc/classes/main/registry/.htaccess -text inc/classes/main/registry/class_ -text inc/classes/main/registry/generic/.htaccess -text -inc/classes/main/registry/socket/.htaccess -text inc/classes/main/registry/sub/.htaccess -text inc/classes/main/request/.htaccess -text inc/classes/main/request/class_ -text diff --git a/inc/classes/interfaces/registry/socket/class_RegisterableSocket.php b/inc/classes/interfaces/registry/socket/class_RegisterableSocket.php index 4913354d..eb0c1eb6 100644 --- a/inc/classes/interfaces/registry/socket/class_RegisterableSocket.php +++ b/inc/classes/interfaces/registry/socket/class_RegisterableSocket.php @@ -50,6 +50,14 @@ interface RegisterableSocket extends Registerable { * @throws NoSocketRegisteredException If the requested socket is not registered */ function getRegisteredSocketResource (ProtocolHandler $protocolInstance); + + /** + * "Getter" for protocol/connection instance from given package data + * + * @param $packageData Raw package data + * @return $protocolInstance An instance of a ProtocolHandler class + */ + function getHandlerInstanceFromPackageData (array $packageData); } // [EOF] diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index d2ae75e2..fe391873 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -113,6 +113,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $parserInstance = null; + /** + * A ProtocolHandler instance + */ + private $protocolInstance = null; + /** * The real class name */ @@ -133,6 +138,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $socketResource = false; + /** + * Package data + */ + private $packageData = array(); + /*********************** * Exception codes.... * ***********************/ @@ -547,7 +557,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * * @return $realClass The name of the real class (not BaseFrameworkSystem) */ - public final function __toString () { + public function __toString () { return $this->realClass; } @@ -1350,6 +1360,25 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { return $this->parserInstance; } + /** + * Setter for ProtocolHandler instance + * + * @param $protocolInstance An instance of an ProtocolHandler + * @return void + */ + public final function setProtocolInstance (ProtocolHandler $protocolInstance) { + $this->protocolInstance = $protocolInstance; + } + + /** + * Getter for ProtocolHandler instance + * + * @return $protocolInstance An instance of an ProtocolHandler + */ + public final function getProtocolInstance () { + return $this->protocolInstance; + } + /** * Setter for socket resource * @@ -1368,6 +1397,25 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { public function getSocketResource () { return $this->socketResource; } + + /** + * Setter for raw package Data + * + * @param $packageData Raw package Data + * @return void + */ + public final function setPackageData (array $packageData) { + $this->packageData = $packageData; + } + + /** + * Getter for raw package Data + * + * @return $packageData Raw package Data + */ + public function getPackageData () { + return $this->packageData; + } } // [EOF] diff --git a/inc/classes/main/container/socket/class_SocketContainer.php b/inc/classes/main/container/socket/class_SocketContainer.php index eff4ca18..cfa66f0d 100644 --- a/inc/classes/main/container/socket/class_SocketContainer.php +++ b/inc/classes/main/container/socket/class_SocketContainer.php @@ -36,18 +36,43 @@ class SocketContainer extends BaseContainer implements Registerable { * Creates an instance of this Container class and prepares it for usage * * @param $socketResource A valid socket resource + * @param $protocolInstance A ProtocolHandler instance + * @param $packageData Raw package data * @return $containerInstance An instance of this Container class */ - public final static function createSocketContainer ($socketResource) { + public final static function createSocketContainer ($socketResource, ProtocolHandler $protocolInstance, array $packageData) { // Get a new instance $containerInstance = new SocketContainer(); - // Set the resource + // Set the resource ... $containerInstance->setSocketResource($socketResource); + // ..., protocol instance ... + $containerInstance->setProtocolInstance($protocolInstance); + + // ... and package data + $containerInstance->setPackageData($packageData); + // Return the prepared instance return $containerInstance; } + + /** + * Checks wether the given address (IP) matches with the one from the socket resource + * + * @param $addressPort The address:port (IP to check + * @return $matches Wether $address matches with the one from socket resource + */ + public final function ifAddressMatches ($addressPort) { + // Get current package data + $data = $this->getPackageData(); + + // So, does both match? + $matches = ((isset($data['recipient'])) && ($data['recipient'] === $addressPort)); + + // Return result + return $matches; + } } // [EOF] diff --git a/inc/classes/main/registry/class_BaseRegistry.php b/inc/classes/main/registry/class_BaseRegistry.php index ca01a2a2..7106d5c7 100644 --- a/inc/classes/main/registry/class_BaseRegistry.php +++ b/inc/classes/main/registry/class_BaseRegistry.php @@ -73,6 +73,15 @@ class BaseRegistry extends BaseFrameworkSystem implements Registerable { $this->instanceRegistry[$instanceKey] = $objectInstance; } + /** + * Getter for whole instanceregistry + * + * @return $instanceRegistry The whole instance registry array + */ + public final function getInstanceRegistry () { + return $this->instanceRegistry; + } + /** * Adds a new entry to the given list name. If you want to add objects * please use addInstance() and getInstance() instead. diff --git a/inc/classes/main/registry/socket/.htaccess b/inc/classes/main/registry/socket/.htaccess deleted file mode 100644 index 3a428827..00000000 --- a/inc/classes/main/registry/socket/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/inc/classes/main/registry/socket/class_SocketRegistry.php b/inc/classes/main/registry/socket/class_SocketRegistry.php deleted file mode 100644 index 86da4929..00000000 --- a/inc/classes/main/registry/socket/class_SocketRegistry.php +++ /dev/null @@ -1,209 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009, 2010 Core Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -class SocketRegistry extends BaseRegistry implements Register, RegisterableSocket { - // Exception constants - const SOCKET_NOT_REGISTERED = 0xd00; - - /** - * Instance of this class - */ - private static $registryInstance = null; - - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Singleton getter for self instance. This class has no factory pattern - * because here is no need for special parameters. - * - * @return $registryInstance Instance of this class - */ - public final static function createSocketRegistry () { - // Is an instance there? - if (is_null(self::$registryInstance)) { - // Not yet, so create one - self::$registryInstance = new SocketRegistry(); - } // END - if - - // Return the instance - 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. - * - * @param $protocolInstance An instance of a ProtocolHandler class - * @param $socketResource A valid socket resource - * @return $isRegistered Wether the given socket resource is registered - */ - public function isSocketRegistered (ProtocolHandler $protocolInstance, $socketResource) { - // 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; - } - - /** - * Registeres given socket for listener or throws an exception if it is already registered - * - * @param $protocolInstance An instance of a ProtocolHandler class - * @param $socketResource A valid socket resource - * @throws SocketAlreadyRegisteredException If the given socket is already registered - * @return void - */ - public function registerSocket (ProtocolHandler $protocolInstance, $socketResource) { - // Is the socket already registered? - if ($this->isSocketRegistered($protocolInstance, $socketResource)) { - // Throw the exception - throw new SocketAlreadyRegisteredException($protocolInstance, BaseListener::EXCEPTION_SOCKET_ALREADY_REGISTERED); - } // END - if - - // 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); - } - - /** - * Getter for given listener's socket resource - * - * @param $protocolInstance An instance of a ProtocolHandler class - * @return $socketResource A valid socket resource - * @throws NoSocketRegisteredException If the requested socket is not registered - */ - 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 - - // 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; - } -} - -// [EOF] -?>