58 lines
1.4 KiB
PHP
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 . '\\');
|
|
}
|
|
} |