* @return $socketResource Socket resource
*/
public static function createSocketFromPackageData (array $packageData, $protocolName) {
- // Construct configuration entry for object factory
- $configEntry = $protocolName . '_connection_helper_class';
+ // Construct registry key
+ $registryKey = 'socket_' . $protocolName . '_' . $packageData[NetworkPackage::PACKAGE_DATA_RECIPIENT];
- // And call the static method
- $socketResource = call_user_func(FrameworkConfiguration::getInstance()->getConfigEntry($configEntry) . '::createConnectionFromPackageData', $packageData);
+ // Is the key there?
+ if (Registry::getRegistry()->instanceExists($registryKey)) {
+ // Get container instance
+ $containerInstance = Registry::getRegistry()->getInstance($registryKey);
+
+ // Get socket back
+ $socketResource = $containerInstance->getSocketResource();
+ } else {
+ // Construct configuration entry for object factory and get it
+ $className = FrameworkConfiguration::getInstance()->getConfigEntry($protocolName . '_connection_helper_class');
+
+ // And call the static method
+ $socketResource = call_user_func($className . '::createConnectionFromPackageData', $packageData);
+
+ // Construct container class, this won't be reached if an exception is thrown
+ $containerInstance = ObjectFactory::CreateObjectByConfiguredName('socket_container_class', array($socketResource, NULL, $packageData));
+
+ // Register it with the registry
+ Registry::getRegistry()->addInstance($registryKey, $containerInstance);
+ }
// Return the resource
return $socketResource;