From f769e425e27b04cdfc8d384f56864e0cef7d13b3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Fri, 19 May 2017 18:05:37 +0200 Subject: [PATCH] Next wave: - imported BaseVisitor - imported BaseRegistry, RegisterableSocket, SocketRegistryFactory - imported ConnectionInfoFactory, ShareableInfo - imported ConnectionHelper - added namespaces to configuration entries - removed now generic classes/interfaces (see core framework) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../hub/classes/class_BaseHubSystem.php | 1 + .../class_PeerStateLookupDatabaseWrapper.php | 1 + .../hub/classes/factories/info/.htaccess | 1 - .../info/class_ConnectionInfoFactory.php | 71 ---- .../states/peer/class_PeerStateFactory.php | 3 + .../hub/classes/helper/connection/class_ | 1 + .../ipv4/tcp/class_TcpConnectionHelper.php | 3 +- .../ipv4/udp/class_UdpConnectionHelper.php | 6 + application/hub/classes/info/.htaccess | 1 - application/hub/classes/info/class_ | 50 --- .../hub/classes/info/class_BaseInfo.php | 44 --- .../hub/classes/info/connection/.htaccess | 1 - .../info/connection/class_ConnectionInfo.php | 121 ------ .../classes/package/class_NetworkPackage.php | 4 + .../fragmenter/class_PackageFragmenter.php | 3 +- .../objects/class_ObjectTypeRegistry.php | 4 + .../hub/classes/registry/socket/.htaccess | 1 - .../registry/socket/class_SocketRegistry.php | 346 ------------------ .../state/peer/class_PeerStateResolver.php | 6 + .../class_ConnectionStatisticsHelper.php | 1 + application/hub/classes/visitor/pool/class_ | 1 + .../visitor/pool/handler/class_Handler | 1 + .../class_RawDataPoolMonitorVisitor.php | 1 + .../visitor/pool/shutdown/class_Shutdown | 1 + .../class_ShutdownListenerPoolVisitor.php | 1 + .../class_HalfShutdownSocketVisitor.php | 4 + .../socket/class_ShutdownSocketVisitor.php | 4 + application/hub/config.php | 8 +- .../connections/class_ConnectionHelper.php | 3 + .../peer_states/class_LookupablePeerState.php | 3 + .../package/fragmenter/class_Fragmentable.php | 3 + .../hub/interfaces/shareable/.htaccess | 1 - .../hub/interfaces/shareable/info/.htaccess | 1 - .../shareable/info/class_ShareableInfo.php | 50 --- core | 2 +- 35 files changed, 58 insertions(+), 695 deletions(-) delete mode 100644 application/hub/classes/factories/info/.htaccess delete mode 100644 application/hub/classes/factories/info/class_ConnectionInfoFactory.php delete mode 100644 application/hub/classes/info/.htaccess delete mode 100644 application/hub/classes/info/class_ delete mode 100644 application/hub/classes/info/class_BaseInfo.php delete mode 100644 application/hub/classes/info/connection/.htaccess delete mode 100644 application/hub/classes/info/connection/class_ConnectionInfo.php delete mode 100644 application/hub/classes/registry/socket/.htaccess delete mode 100644 application/hub/classes/registry/socket/class_SocketRegistry.php delete mode 100644 application/hub/interfaces/shareable/.htaccess delete mode 100644 application/hub/interfaces/shareable/info/.htaccess delete mode 100644 application/hub/interfaces/shareable/info/class_ShareableInfo.php diff --git a/application/hub/classes/class_BaseHubSystem.php b/application/hub/classes/class_BaseHubSystem.php index f56f81007..3e62ebed0 100644 --- a/application/hub/classes/class_BaseHubSystem.php +++ b/application/hub/classes/class_BaseHubSystem.php @@ -6,6 +6,7 @@ namespace Hub\Generic; use Hub\Network\Receive\Receivable; // Import framework stuff +use CoreFramework\Information\ShareableInfo; use CoreFramework\Object\BaseFrameworkSystem; use CoreFramework\Pool\Poolable; diff --git a/application/hub/classes/database/frontend/states/class_PeerStateLookupDatabaseWrapper.php b/application/hub/classes/database/frontend/states/class_PeerStateLookupDatabaseWrapper.php index 6894edf69..929d02cb6 100644 --- a/application/hub/classes/database/frontend/states/class_PeerStateLookupDatabaseWrapper.php +++ b/application/hub/classes/database/frontend/states/class_PeerStateLookupDatabaseWrapper.php @@ -3,6 +3,7 @@ namespace Hub\Database\Frontend\Node\PeerState; // Import application-specific sutff +use Hub\Helper\Connection\ConnectionHelper; use Hub\Tools\HubTools; // Import framework stuff diff --git a/application/hub/classes/factories/info/.htaccess b/application/hub/classes/factories/info/.htaccess deleted file mode 100644 index 3a4288278..000000000 --- a/application/hub/classes/factories/info/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/application/hub/classes/factories/info/class_ConnectionInfoFactory.php b/application/hub/classes/factories/info/class_ConnectionInfoFactory.php deleted file mode 100644 index 14454ecc5..000000000 --- a/application/hub/classes/factories/info/class_ConnectionInfoFactory.php +++ /dev/null @@ -1,71 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub 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 ConnectionInfoFactory extends ObjectFactory { - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Returns a singleton (registry-based) ShareableInfo instance - * - * @param $protocolName Name of protocol (e.g. 'tcp') - * @param $type Connection type ('listener' or 'helper') - * @return $infoInstance An instance of a ShareableInfo class - */ - public static final function createConnectionInfoInstance ($protocolName, $type) { - // Generate key - $key = 'connection_info_' . $protocolName . '_' . $type; - - // If there is no info? - if (Registry::getRegistry()->instanceExists($key)) { - // Get info from registry - $infoInstance = Registry::getRegistry()->getInstance($key); - } else { - // Get the info instance - $infoInstance = self::createObjectByConfiguredName('connection_info_class'); - - // Add it to the registry - Registry::getRegistry()->addInstance($key, $infoInstance); - } - - // Return the instance - return $infoInstance; - } -} - -// [EOF] -?> diff --git a/application/hub/classes/factories/states/peer/class_PeerStateFactory.php b/application/hub/classes/factories/states/peer/class_PeerStateFactory.php index fdfb7fdf8..8d7151be3 100644 --- a/application/hub/classes/factories/states/peer/class_PeerStateFactory.php +++ b/application/hub/classes/factories/states/peer/class_PeerStateFactory.php @@ -2,6 +2,9 @@ // Own namespace namespace Hub\Factory\State\Peer; +// Import application-specific stuff +use Hub\Helper\Connection\ConnectionHelper; + // Import framework stuff use CoreFramework\Factory\ObjectFactory; diff --git a/application/hub/classes/helper/connection/class_ b/application/hub/classes/helper/connection/class_ index 48a5febd7..eabd3cd80 100644 --- a/application/hub/classes/helper/connection/class_ +++ b/application/hub/classes/helper/connection/class_ @@ -4,6 +4,7 @@ namespace Hub\Helper\Connection\; // Import application-specific stuff use Hub\Helper\Connection\BaseConnectionHelper; +use Hub\Helper\Connection\ConnectionHelper; /** * A ??? connection helper class diff --git a/application/hub/classes/helper/connection/ipv4/tcp/class_TcpConnectionHelper.php b/application/hub/classes/helper/connection/ipv4/tcp/class_TcpConnectionHelper.php index fe8ac3f11..acccfcfb8 100644 --- a/application/hub/classes/helper/connection/ipv4/tcp/class_TcpConnectionHelper.php +++ b/application/hub/classes/helper/connection/ipv4/tcp/class_TcpConnectionHelper.php @@ -2,7 +2,8 @@ // Own namespace namespace Hub\Helper\Connection\Tcp; -// Import hub-specific sutff +// Import application-specific stuff +use Hub\Helper\Connection\ConnectionHelper; use Hub\Tools\HubTools; /** diff --git a/application/hub/classes/helper/connection/ipv4/udp/class_UdpConnectionHelper.php b/application/hub/classes/helper/connection/ipv4/udp/class_UdpConnectionHelper.php index 4ab6f3b26..22b8711fa 100644 --- a/application/hub/classes/helper/connection/ipv4/udp/class_UdpConnectionHelper.php +++ b/application/hub/classes/helper/connection/ipv4/udp/class_UdpConnectionHelper.php @@ -1,4 +1,10 @@ - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub 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 ???Info extends BaseInfo implements ShareableInfo { - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates an instance of this class - * - * @return $infoInstance An instance of a ShareableInfo class - */ - public final static function create???Info () { - // Get new instance - $infoInstance = new ???Info(); - - // Return the prepared instance - return $infoInstance; - } -} - -// [EOF] -?> diff --git a/application/hub/classes/info/class_BaseInfo.php b/application/hub/classes/info/class_BaseInfo.php deleted file mode 100644 index 210ef070d..000000000 --- a/application/hub/classes/info/class_BaseInfo.php +++ /dev/null @@ -1,44 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub 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 BaseInfo extends BaseHubSystem { - /** - * Protected constructor - * - * @param $className Name of the class - * @return void - */ - protected function __construct ($className) { - // Call parent constructor - parent::__construct($className); - } -} - -// [EOF] -?> diff --git a/application/hub/classes/info/connection/.htaccess b/application/hub/classes/info/connection/.htaccess deleted file mode 100644 index 3a4288278..000000000 --- a/application/hub/classes/info/connection/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/application/hub/classes/info/connection/class_ConnectionInfo.php b/application/hub/classes/info/connection/class_ConnectionInfo.php deleted file mode 100644 index 9ea663635..000000000 --- a/application/hub/classes/info/connection/class_ConnectionInfo.php +++ /dev/null @@ -1,121 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub 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 ConnectionInfo extends BaseInfo implements ShareableInfo, Registerable { - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates an instance of this class - * - * @return $infoInstance An instance of a ShareableInfo class - */ - public final static function createConnectionInfo () { - // Get new instance - $infoInstance = new ConnectionInfo(); - - // Return the prepared instance - return $infoInstance; - } - - /** - * Fills the information class with data from a Listenable instance - * - * @param $listenerInstance An instance of a Listenable class - * @return void - */ - public function fillWithListenerInformation (Listenable $listenerInstance) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: protocolName=' . $listenerInstance->getProtocolName() . ',listenerInstance=' . $listenerInstance->__toString() . ' - CALLED!'); - - // Fill the generic array with several data from the listener: - $this->setProtocolName($listenerInstance->getProtocolName()); - $this->setGenericArrayElement('connection', 'dummy', 'dummy', UniversalNodeLocator::UNL_PART_ADDRESS , $listenerInstance->getListenAddress()); - $this->setGenericArrayElement('connection', 'dummy', 'dummy', UniversalNodeLocator::UNL_PART_PORT , $listenerInstance->getListenPort()); - - // Set listener here - $this->setListenerInstance($listenerInstance); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: EXIT!'); - } - - /** - * Fills the information class with data from a ConnectionHelper instance - * - * @param $helperInstance An instance of a ConnectionHelper class - * @return void - */ - public function fillWithConnectionHelperInformation (ConnectionHelper $helperInstance) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: protocolName=' . $helperInstance->getProtocolName() . ',helperInstance=' . $helperInstance->__toString() . ',socketResource=' . $helperInstance->getSocketResource() . ' - CALLED!'); - - // Fill the generic array with several data from the listener: - $this->setProtocolName($helperInstance->getProtocolName()); - $this->setGenericArrayElement('connection', 'dummy', 'dummy', UniversalNodeLocator::UNL_PART_ADDRESS , $helperInstance->getAddress()); - $this->setGenericArrayElement('connection', 'dummy', 'dummy', UniversalNodeLocator::UNL_PART_PORT , $helperInstance->getConnectionPort()); - - // Set helper here - $this->setHelperInstance($helperInstance); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: EXIT!'); - } - - /** - * Getter for address - * - * @return $address Address from shared information - */ - public final function getAddress () { - // Return it from generic array - return $this->getGenericArrayElement('connection', 'dummy', 'dummy', UniversalNodeLocator::UNL_PART_ADDRESS); - } - - /** - * Getter for port - * - * @return $port Port from shared information - */ - public final function getPort () { - // Return it from generic array - return $this->getGenericArrayElement('connection', 'dummy', 'dummy', UniversalNodeLocator::UNL_PART_PORT); - } -} - -// [EOF] -?> diff --git a/application/hub/classes/package/class_NetworkPackage.php b/application/hub/classes/package/class_NetworkPackage.php index 6966afa01..b245f7b88 100644 --- a/application/hub/classes/package/class_NetworkPackage.php +++ b/application/hub/classes/package/class_NetworkPackage.php @@ -8,11 +8,15 @@ use Hub\Factory\Dht\DhtObjectFactory; use Hub\Factory\Node\NodeObjectFactory; use Hub\Generic\BaseHubSystem; use Hub\Helper\Connection\BaseConnectionHelper; +use Hub\Helper\Connection\ConnectionHelper; use Hub\Network\Receive\Receivable; use Hub\Tools\HubTools; // Import framework stuff +use CoreFramework\Factory\Connection\ConnectionInfoFactory; use CoreFramework\Factory\ObjectFactory; +use CoreFramework\Factory\Registry\Socket\SocketRegistryFactory; +use CoreFramework\Information\ShareableInfo; use CoreFramework\Registry\Registry; use CoreFramework\Registry\Registerable; use CoreFramework\Visitor\Visitable; diff --git a/application/hub/classes/package/fragmenter/class_PackageFragmenter.php b/application/hub/classes/package/fragmenter/class_PackageFragmenter.php index 362e31594..e48e92374 100644 --- a/application/hub/classes/package/fragmenter/class_PackageFragmenter.php +++ b/application/hub/classes/package/fragmenter/class_PackageFragmenter.php @@ -2,8 +2,9 @@ // Own namespace namespace Hub\Network\Package\Fragment; -// Import hub-specific stuff +// Import application-specific stuff use Hub\Generic\BaseHubSystem; +use Hub\Helper\Connection\ConnectionHelper; // Import framework stuff use CoreFramework\Factory\ObjectFactory; diff --git a/application/hub/classes/registry/objects/class_ObjectTypeRegistry.php b/application/hub/classes/registry/objects/class_ObjectTypeRegistry.php index d1d0c13ff..2ddce8585 100644 --- a/application/hub/classes/registry/objects/class_ObjectTypeRegistry.php +++ b/application/hub/classes/registry/objects/class_ObjectTypeRegistry.php @@ -2,6 +2,10 @@ // Own namespace namespace Hub\Registry\ObjectType; +// Imported framework stuff +use CoreFramework\Registry\BaseRegistry; +use CoreFramework\Registry\Register; + /** * A ObjectType registry * diff --git a/application/hub/classes/registry/socket/.htaccess b/application/hub/classes/registry/socket/.htaccess deleted file mode 100644 index 3a4288278..000000000 --- a/application/hub/classes/registry/socket/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/application/hub/classes/registry/socket/class_SocketRegistry.php b/application/hub/classes/registry/socket/class_SocketRegistry.php deleted file mode 100644 index bf89d25a6..000000000 --- a/application/hub/classes/registry/socket/class_SocketRegistry.php +++ /dev/null @@ -1,346 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.shipsimu.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 = 0xd200; - - /** - * Instance of this class - */ - private static $registryInstance = NULL; - - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates a singleton instance of this registry class - * - * @return $registryInstance An instance of this class - */ - public static final 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: class:type:port - * - * @param $infoInstance An instance of a ShareableInfo class - * @return $key A string representation of the socket for the registry - */ - private function getSubRegistryKey (ShareableInfo $infoInstance) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: infoInstance=' . $infoInstance->__toString() . ' - CALLED!'); - - // Get address and port - $address = $infoInstance->getAddress(); - $port = $infoInstance->getPort(); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: address=' . $address . ',port=' . $port); - - // Get connection type and port number and add both together - $key = sprintf('%s:%s:%s:%s', - $infoInstance->__toString(), - $infoInstance->getProtocolName(), - $address, - $port - ); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: key=' . $key . ' - EXIT!'); - - // Return resulting key - return $key; - } - - /** - * "Getter" to get a string respresentation of the listener - * - * @param $infoInstance An instance of a ShareableInfo class - * @return $key A string representation of the listener for the registry - */ - private function getRegistryKeyFromInfo (ShareableInfo $infoInstance) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: this=' . $this->__toString() . ',infoInstance=' . $infoInstance->__toString() . ' - CALLED!'); - - // Get the key - $key = $infoInstance->getProtocolName(); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: key=' . $key . ' - EXIT!'); - - // Return resulting key - return $key; - } - - /** - * Checks whether the shared connection info is registered - * - * @param $infoInstance An instance of a ShareableInfo class - * @return $isRegistered Whether the listener is registered - */ - private function isInfoRegistered (ShareableInfo $infoInstance) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']:info=' . $infoInstance->getProtocolName() . ' - CALLED!'); - - // Get the key - $key = $this->getRegistryKeyFromInfo($infoInstance); - - // Determine it - $isRegistered = $this->instanceExists($key); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']:info=' . $infoInstance->getProtocolName() . ',isRegistered=' . intval($isRegistered) . ' - EXIT!'); - - // Return result - return $isRegistered; - } - - /** - * Checks whether given socket resource is registered. If $socketResource is - * FALSE only the instance will be checked. - * - * @param $infoInstance An instance of a ShareableInfo class - * @param $socketResource A valid socket resource - * @return $isRegistered Whether the given socket resource is registered - */ - public function isSocketRegistered (ShareableInfo $infoInstance, $socketResource) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']:info=' . $infoInstance->getProtocolName() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ' - CALLED!'); - - // Default is not registered - $isRegistered = FALSE; - - // First, check for the instance, there can be only once - if ($this->isInfoRegistered($infoInstance)) { - // That one is found so "get" a registry key from it - $key = $this->getRegistryKeyFromInfo($infoInstance); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: this=' . $this->__toString() . ',info=' . $infoInstance->getProtocolName() . ',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($infoInstance); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: this=' . $this->__toString() . ',info=' . $infoInstance->getProtocolName() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ',key=' . $key . ',socketKey=' . $socketKey . ' - Checking existence ...'); - - // Is it there? - if ($registryInstance->instanceExists($socketKey)) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: 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: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: Final result: isRegistered(' . $socketResource . ')=' . intval($isRegistered)); - } // END - if - } // END - if - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']:info=' . $infoInstance->getProtocolName() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ',isRegistered=' . intval($isRegistered) . ' - EXIT!'); - - // Return the result - return $isRegistered; - } - - /** - * Registeres given socket for listener or throws an exception if it is already registered - * - * @param $infoInstance An instance of a ShareableInfo class - * @param $socketResource A valid socket resource - * @param $packageData Optional raw package data - * @throws SocketAlreadyRegisteredException If the given socket is already registered - * @return void - */ - public function registerSocket (ShareableInfo $infoInstance, $socketResource, array $packageData = array()) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']:info=' . $infoInstance->getProtocolName() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ' - CALLED!'); - - // Is the socket already registered? - if ($this->isSocketRegistered($infoInstance, $socketResource)) { - // Throw the exception - throw new SocketAlreadyRegisteredException(array($infoInstance, $socketResource), BaseListener::EXCEPTION_SOCKET_ALREADY_REGISTERED); - } // END - if - - // Does the instance exist? - if (!$this->isInfoRegistered($infoInstance)) { - // 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 info - $this->addInstance($this->getRegistryKeyFromInfo($infoInstance), $registryInstance); - } else { - // Get the sub-registry back - $registryInstance = $this->getInstance($this->getRegistryKeyFromInfo($infoInstance)); - } - - // Get a key for sub-registries - $socketKey = $this->getSubRegistryKey($infoInstance); - - // Get a socket container - $socketInstance = ObjectFactory::CreateObjectByConfiguredName('socket_container_class', array($socketResource, $infoInstance, $packageData)); - - // We have a sub-registry, the socket key and the socket, now we need to put all together - //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: socketKey=' . $socketKey . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ' - adding socket container instance ...'); - $registryInstance->addInstance($socketKey, $socketInstance); - } - - /** - * Getter for given listener's socket resource - * - * @param $listenerInstance An instance of a Listenable class - * @return $socketResource A valid socket resource - * @throws NoSocketRegisteredException If the requested socket is not registered - */ - public function getRegisteredSocketResource (Listenable $listenerInstance) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']:listener=' . $listenerInstance->getConnectionType() . ' - CALLED!'); - - // The socket must be registered before we can return it - if (!$this->isInfoRegistered($listenerInstance)) { - // Throw the exception - throw new NoSocketRegisteredException ($listenerInstance, self::SOCKET_NOT_REGISTERED); - } // END - if - - // Now get the key from the listener - $key = $this->getRegistryKeyFromInfo($listenerInstance); - - // And get the registry - $registryInstance = $this->getInstance($key); - - // Get a socket key - $socketKey = $this->getSubRegistryKey($listenerInstance); - - // And the final socket resource - $socketResource = $registryInstance->getInstance($socketKey)->getSocketResource(); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']:listener=' . $listenerInstance->getConnectionType() . ',socketResource[' . gettype($socketResource) . ']=' . $socketResource . ' - EXIT!'); - - // Return the resource - return $socketResource; - } - - /** - * "Getter" for info instance from given package data - * - * @param $packageData Raw package data - * @return $infoInstance An instance of a ShareableInfo class - */ - public function getInfoInstanceFromPackageData (array $packageData) { - // Init info instance - $infoInstance = NULL; - //* DEBUG-DIE: */ die(__METHOD__ . ':packageData=' . print_r($packageData, TRUE)); - - // Get all keys and check them - foreach ($this->getInstanceRegistry() as $key => $registryInstance) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: key=' . $key . ',registryInstance=' . $registryInstance->__toString()); - - // This is always a SubRegistry instance - foreach ($registryInstance->getInstanceRegistry() as $subKey => $containerInstance) { - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: key=' . $key . ',subKey=' . $subKey . ',containerInstance=' . $containerInstance->__toString()); - - // Is this a SocketContainer instance and is the address the same? - if (($containerInstance instanceof SocketContainer) && ($containerInstance->ifAddressMatches($packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT]))) { - // Debug die - //* DEBUG-DIE: */ die(__METHOD__ . ': containerInstance=' . print_r($containerInstance, TRUE)); - - // Get listener and helper instances - $listenerInstance = $containerInstance->getListenerInstance(); - $helperInstance = $containerInstance->getHelperInstance(); - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: key=' . $key . ',subKey=' . $subKey . ',listenerInstance[]=' . gettype($listenerInstance) . ',helperInstance[]=' . gettype($helperInstance)); - - // Is a listener or helper set? - if ($listenerInstance instanceof Listenable) { - // Found a listener, so get the info instance first - $infoInstance = ConnectionInfoFactory::createConnectionInfoInstance($listenerInstance->getProtocolName(), 'helper'); - - // Fill info instance with listener data - $infoInstance->fillWithListenerInformation($listenerInstance); - } elseif ($helperInstance instanceof ConnectionHelper) { - // Found a helper, so get the info instance first - $infoInstance = ConnectionInfoFactory::createConnectionInfoInstance($helperInstance->getProtocolName(), 'helper'); - - // Helper is found - $infoInstance->fillWithConnectionHelperInformation($helperInstance); - } else { - // Not supported state! - $this->debugInstance('[' . __METHOD__ . ':' . __LINE__ . ']: Invalid state found, please report this to the developers with full debug infos.' . PHP_EOL); - } - - // Debug message - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('SOCKET-REGISTRY[' . __METHOD__ . ':' . __LINE__ . ']: key=' . $key . ',subKey=' . $subKey . ',infoInstance[' . gettype($infoInstance) . ']=' . $infoInstance->__toString() . ' with protocol ' . $infoInstance->getProtocolName() . ' - FOUND!'); - break; - } // END - if - } // END - foreach - - // Is no longer NULL set? - if (!is_null($infoInstance)) { - // Then skip here, too - break; - } // END - if - } // END - foreach - - // Return the info instance - return $infoInstance; - } -} - -// [EOF] -?> diff --git a/application/hub/classes/resolver/state/peer/class_PeerStateResolver.php b/application/hub/classes/resolver/state/peer/class_PeerStateResolver.php index 082be9f32..4287b3363 100644 --- a/application/hub/classes/resolver/state/peer/class_PeerStateResolver.php +++ b/application/hub/classes/resolver/state/peer/class_PeerStateResolver.php @@ -1,4 +1,10 @@ setConfigEntry('socket_raw_data_handler_class', 'SocketRawDataHandler'); $cfg->setConfigEntry('shutdown_listener_pool_visitor_class', 'ShutdownListenerPoolVisitor'); // CFG: SHUTDOWN-SOCKET-VISITOR-CLASS -$cfg->setConfigEntry('shutdown_socket_visitor_class', 'ShutdownSocketVisitor'); +$cfg->setConfigEntry('shutdown_socket_visitor_class', 'Hub\Visitor\Shutdown\Socket\ShutdownSocketVisitor'); // CFG: HALF-SHUTDOWN-SOCKET-VISITOR-CLASS -$cfg->setConfigEntry('half_shutdown_socket_visitor_class', 'HalfShutdownSocketVisitor'); +$cfg->setConfigEntry('half_shutdown_socket_visitor_class', 'Hub\Visitor\Shutdown\Socket\HalfShutdownSocketVisitor'); // CFG: NODE-RAW-DATA-MONITOR-VISITOR-CLASS $cfg->setConfigEntry('node_raw_data_monitor_visitor_class', 'RawDataPoolMonitorVisitor'); @@ -706,7 +706,7 @@ $cfg->setConfigEntry('deco_package_compressor_class', 'NetworkPackageCompressorD $cfg->setConfigEntry('raw_package_compressor_class', 'ZlibCompressor'); // CFG: SOCKET-REGISTRY-CLASS -$cfg->setConfigEntry('socket_registry_class', 'SocketRegistry'); +$cfg->setConfigEntry('socket_registry_class', 'CoreFramework\Registry\Socket\SocketRegistry'); // CFG: SOCKET-CONTAINER-CLASS $cfg->setConfigEntry('socket_container_class', 'SocketContainer'); @@ -834,7 +834,7 @@ $cfg->setConfigEntry('node_dht_class', 'NodeDhtFacade'); $cfg->setConfigEntry('max_dht_recipients', 10); // CFG: CONNECTION-INFO-CLASS -$cfg->setConfigEntry('connection_info_class', 'ConnectionInfo'); +$cfg->setConfigEntry('connection_info_class', 'CoreFramework\Information\Connection\ConnectionInfo'); // CFG: DEFAULT-HUB-CONSOLE-CONTROLLER $cfg->setConfigEntry('default_hub_console_controller', 'main'); diff --git a/application/hub/interfaces/helper/connections/class_ConnectionHelper.php b/application/hub/interfaces/helper/connections/class_ConnectionHelper.php index 1535feefa..efde02fa3 100644 --- a/application/hub/interfaces/helper/connections/class_ConnectionHelper.php +++ b/application/hub/interfaces/helper/connections/class_ConnectionHelper.php @@ -1,4 +1,7 @@ - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.shipsimu.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 . - */ -interface ShareableInfo extends FrameworkInterface { - /** - * Fills the information class with data from a Listenable instance - * - * @param $listenerInstance An instance of a Listenable class - * @return void - */ - function fillWithListenerInformation (Listenable $listenerInstance); - - /** - * Fills the information class with data from a ConnectionHelper instance - * - * @param $helperInstance An instance of a ConnectionHelper class - * @return void - */ - function fillWithConnectionHelperInformation (ConnectionHelper $helperInstance); -} - -// [EOF] -?> diff --git a/core b/core index 6cf40d9bf..8e72c59c6 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 6cf40d9bfbe6159ce08cbec4c87d504f5829429d +Subproject commit 8e72c59c6c3536da832917acf4f2a3903339ad19 -- 2.39.5