mxmbsocket/lib/Ratchet/Resource/Command/Factory.php
Chris Boden f3c7dd4d7f Socket Proxy
Replaced passing SocketInterface everywhere with a proxy object
2011-11-14 15:56:30 -05:00

58 lines
1.4 KiB
PHP

<?php
namespace Ratchet\Resource\Command;
use Ratchet\Resource\Connection;
/**
* A factory pattern class to easily create all the things in the Ratchet\Resource\Command interface
*/
class Factory {
protected $_paths = array();
public function __construct() {
$this->addActionPath(__NAMESPACE__ . '\\Action');
}
/**
* Add a new namespace of which CommandInterfaces reside under to autoload with $this->newCommand()
* @param string
*/
public function addActionPath($namespace) {
$this->_paths[] = $this->slashIt($namespace);
}
/**
* @return Composite
*/
public function newComposite() {
return new Composite;
}
/**
* @param string
* @return CommandInterface
* @throws UnexpectedValueException
*/
public function newCommand($name, Connection $conn) {
$cmd = null;
foreach ($this->_paths as $path) {
if (class_exists($path . $name)) {
$cmd = $path . $name;
break;
}
}
if (null === $cmd) {
throw new \UnexepctedValueException("Command {$name} not found");
}
return new $cmd($conn);
}
/**
* @param string
* @return string
*/
protected function slashIt($ns) {
return (substr($ns, -1) == '\\' ? $ns : $ns . '\\');
}
}