From: Roland Häder Date: Mon, 26 Apr 2010 14:52:24 +0000 (+0000) Subject: SocketRegistry basicly finished: X-Git-Url: https://git.mxchange.org/?p=core.git;a=commitdiff_plain;h=9108a2a3b038ee56833f7811accb49fdce2944e8 SocketRegistry basicly finished: - A newly added SubRegistry was required for the socket registry - Added container for sockets (so they can be stored in registries) - Getter/setter added for socket resource (no validation) --- diff --git a/.gitattributes b/.gitattributes index dfeeab0b..bc3380a3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -272,6 +272,9 @@ inc/classes/main/compressor/class_GzipCompressor.php -text inc/classes/main/compressor/class_NullCompressor.php -text inc/classes/main/console/.htaccess -text inc/classes/main/console/class_ConsoleTools.php -text +inc/classes/main/container/.htaccess -text +inc/classes/main/container/class_ -text +inc/classes/main/container/socket/.htaccess -text inc/classes/main/controller/.htaccess -text inc/classes/main/controller/captcha/.htaccess -text inc/classes/main/controller/captcha/class_ImageCodeCaptchaController.php -text @@ -443,6 +446,7 @@ 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 inc/classes/main/request/class_BaseRequest.php -text diff --git a/inc/classes/exceptions/socket/class_NoSocketRegisteredException.php b/inc/classes/exceptions/socket/class_NoSocketRegisteredException.php index 6eeeb153..b6e2939e 100644 --- a/inc/classes/exceptions/socket/class_NoSocketRegisteredException.php +++ b/inc/classes/exceptions/socket/class_NoSocketRegisteredException.php @@ -25,8 +25,8 @@ class NoSocketRegisteredException extends FrameworkException { /** * A Constructor for this exception * - * @param $protocolInstance An instance of a ProtocolHandler class - * @param $code Error code + * @param $protocolInstance An instance of a ProtocolHandler class + * @param $code Error code * @return void */ public function __construct (ProtocolHandler $protocolInstance, $code) { diff --git a/inc/classes/interfaces/registry/socket/class_RegisterableSocket.php b/inc/classes/interfaces/registry/socket/class_RegisterableSocket.php index 14efd131..4913354d 100644 --- a/inc/classes/interfaces/registry/socket/class_RegisterableSocket.php +++ b/inc/classes/interfaces/registry/socket/class_RegisterableSocket.php @@ -49,7 +49,7 @@ interface RegisterableSocket extends Registerable { * @return $socketResource A valid socket resource * @throws NoSocketRegisteredException If the requested socket is not registered */ - function getSocketResource (ProtocolHandler $protocolInstance); + function getRegisteredSocketResource (ProtocolHandler $protocolInstance); } // [EOF] diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index 27e33b8f..d2ae75e2 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -128,6 +128,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $decimals = ','; // German + /** + * Socket resource + */ + private $socketResource = false; + /*********************** * Exception codes.... * ***********************/ @@ -1270,7 +1275,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Setter for image instanxe + * Setter for image instance * * @param $imageInstance An instance of an image * @return void @@ -1280,7 +1285,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Getter for image instanxe + * Getter for image instance * * @return $imageInstance An instance of an image */ @@ -1289,7 +1294,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Setter for stacker instanxe + * Setter for stacker instance * * @param $stackerInstance An instance of an stacker * @return void @@ -1299,7 +1304,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Getter for stacker instanxe + * Getter for stacker instance * * @return $stackerInstance An instance of an stacker */ @@ -1308,7 +1313,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Setter for compressor instanxe + * Setter for compressor instance * * @param $compressorInstance An instance of an compressor * @return void @@ -1318,7 +1323,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Getter for compressor instanxe + * Getter for compressor instance * * @return $compressorInstance An instance of an compressor */ @@ -1327,7 +1332,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Setter for Parseable instanxe + * Setter for Parseable instance * * @param $parserInstance An instance of an Parseable * @return void @@ -1337,13 +1342,32 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { } /** - * Getter for Parseable instanxe + * Getter for Parseable instance * * @return $parserInstance An instance of an Parseable */ public final function getParserInstance () { return $this->parserInstance; } + + /** + * Setter for socket resource + * + * @param $socketResource A valid socket resource + * @return void + */ + public final function setSocketResource ($socketResource) { + $this->socketResource = $socketResource; + } + + /** + * Getter for socket resource + * + * @return $socketResource A valid socket resource + */ + public function getSocketResource () { + return $this->socketResource; + } } // [EOF] diff --git a/inc/classes/main/container/.htaccess b/inc/classes/main/container/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/container/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/container/class_ b/inc/classes/main/container/class_ new file mode 100644 index 00000000..fdb93820 --- /dev/null +++ b/inc/classes/main/container/class_ @@ -0,0 +1,50 @@ + + * @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 ???Container extends BaseContainer implements Registerable { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of this Container class and prepares it for usage + * + * @return $containerInstance An instance of this Container class + */ + public final static function create???Container () { + // Get a new instance + $containerInstance = new ???Container(); + + // Return the prepared instance + return $containerInstance; + } +} + +// [EOF] +?> diff --git a/inc/classes/main/container/class_BaseContainer.php b/inc/classes/main/container/class_BaseContainer.php new file mode 100644 index 00000000..e195027d --- /dev/null +++ b/inc/classes/main/container/class_BaseContainer.php @@ -0,0 +1,38 @@ + + * @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 BaseContainer extends BaseFrameworkSystem { + /** + * Protected constructor + * + * @param $className Name of the class + * @return void + */ + protected function __construct ($className) { + // Call parent constructor + parent::__construct($className); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/container/socket/.htaccess b/inc/classes/main/container/socket/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/container/socket/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/container/socket/class_SocketContainer.php b/inc/classes/main/container/socket/class_SocketContainer.php new file mode 100644 index 00000000..eff4ca18 --- /dev/null +++ b/inc/classes/main/container/socket/class_SocketContainer.php @@ -0,0 +1,54 @@ + + * @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 SocketContainer extends BaseContainer implements Registerable { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of this Container class and prepares it for usage + * + * @param $socketResource A valid socket resource + * @return $containerInstance An instance of this Container class + */ + public final static function createSocketContainer ($socketResource) { + // Get a new instance + $containerInstance = new SocketContainer(); + + // Set the resource + $containerInstance->setSocketResource($socketResource); + + // Return the prepared instance + return $containerInstance; + } +} + +// [EOF] +?> diff --git a/inc/classes/main/registry/class_BaseRegistry.php b/inc/classes/main/registry/class_BaseRegistry.php index 0cf9aeb4..33111286 100644 --- a/inc/classes/main/registry/class_BaseRegistry.php +++ b/inc/classes/main/registry/class_BaseRegistry.php @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class BaseRegistry extends BaseFrameworkSystem { +class BaseRegistry extends BaseFrameworkSystem implements Registerable { /** * Instance of this class */ @@ -97,4 +97,3 @@ class BaseRegistry extends BaseFrameworkSystem { // [EOF] ?> - diff --git a/inc/classes/main/registry/generic/class_Registry.php b/inc/classes/main/registry/generic/class_Registry.php index 4211e014..165b00fd 100644 --- a/inc/classes/main/registry/generic/class_Registry.php +++ b/inc/classes/main/registry/generic/class_Registry.php @@ -58,4 +58,3 @@ class Registry extends BaseRegistry implements Register { // [EOF] ?> - diff --git a/inc/classes/main/registry/socket/class_SocketRegistry.php b/inc/classes/main/registry/socket/class_SocketRegistry.php index 9686826b..86da4929 100644 --- a/inc/classes/main/registry/socket/class_SocketRegistry.php +++ b/inc/classes/main/registry/socket/class_SocketRegistry.php @@ -57,6 +57,55 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke 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. @@ -66,7 +115,26 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke * @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; } /** @@ -84,7 +152,26 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke 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); } /** @@ -94,14 +181,27 @@ class SocketRegistry extends BaseRegistry implements Register, RegisterableSocke * @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; } } diff --git a/inc/classes/main/registry/sub/.htaccess b/inc/classes/main/registry/sub/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/registry/sub/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/registry/sub/class_SubRegistry.php b/inc/classes/main/registry/sub/class_SubRegistry.php new file mode 100644 index 00000000..65c1983e --- /dev/null +++ b/inc/classes/main/registry/sub/class_SubRegistry.php @@ -0,0 +1,50 @@ + + * @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 SubRegistry extends BaseRegistry implements Register { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance (non-singleton, of course) of this registry class + * + * @return $registryInstance An instance of this registry class + */ + public final static function createSubRegistry () { + // Just get a new instance ... + $registryInstance = new SubRegistry(); + + // ... and return it + return $registryInstance; + } +} + +// [EOF] +?>