From: Roland Häder <roland@mxchange.org>
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 @@
-<?php
-/**
- * A Socket registry
- *
- * @author		Roland Haeder <webmaster@ship-simu.org>
- * @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 <http://www.gnu.org/licenses/>.
- */
-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]
-?>