Started observer pattern, API updates, unit tests
This commit is contained in:
parent
5ce4a7b837
commit
f17f59856e
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
phpunit.xml
|
||||
coverage
|
||||
sandbox
|
@ -2,4 +2,14 @@
|
||||
namespace Ratchet;
|
||||
|
||||
interface ApplicationInterface {
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
function getName();
|
||||
|
||||
function onConnect();
|
||||
|
||||
function onMessage();
|
||||
|
||||
function onClose();
|
||||
}
|
@ -4,6 +4,10 @@ namespace Ratchet;
|
||||
class Exception extends \Exception {
|
||||
public function __construct() {
|
||||
$int = socket_last_error();
|
||||
parent::__construct(socket_strerror($int), $int);
|
||||
$msg = socket_strerror($int);
|
||||
|
||||
// todo, replace {$msg: $int} to {$msg}
|
||||
|
||||
parent::__construct($msg, $int);
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
<?php
|
||||
namespace Ratchet\Protocol\WebSocket;
|
||||
use Ratchet\ApplicationInterface as AI;
|
||||
|
||||
class ApplicationInterface extends AI {
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
namespace Ratchet\Protocol\WebSocket;
|
||||
use Ratchet\ServerInterface;
|
||||
use Ratchet\Protocol\ProtocolInterface;
|
||||
use Ratchet\ApplicationInterface;
|
||||
|
||||
class Server implements ProtocolInterface {
|
||||
protected $_server = null;
|
||||
@ -24,6 +25,8 @@ class Server implements ProtocolInterface {
|
||||
);
|
||||
}
|
||||
|
||||
public function attatchApplication(ApplicationInterface $app) {}
|
||||
|
||||
public function run() {
|
||||
}
|
||||
}
|
@ -3,15 +3,28 @@ namespace Ratchet;
|
||||
use Ratchet\Protocol\ProtocolInterface;
|
||||
|
||||
class Server implements ServerInterface {
|
||||
protected $master = null;
|
||||
protected $_master = null;
|
||||
protected $_app = null;
|
||||
|
||||
public function __construct(Socket $socket) {
|
||||
$this->_master = $socket;
|
||||
}
|
||||
|
||||
public function attatchApplication(ApplicationInterface $app) {
|
||||
$this->_app = $app;
|
||||
}
|
||||
|
||||
public function run() {
|
||||
if (!($this->_app instanceof ApplicationInterface)) {
|
||||
throw new \RuntimeException("No application has been bound to the server");
|
||||
}
|
||||
|
||||
set_time_limit(0);
|
||||
ob_implicit_flush();
|
||||
|
||||
do {
|
||||
|
||||
} while (true);
|
||||
// $this->_master->set_nonblock();
|
||||
// declare(ticks = 1);
|
||||
}
|
||||
|
@ -2,5 +2,7 @@
|
||||
namespace Ratchet;
|
||||
|
||||
interface ServerInterface {
|
||||
function attatchApplication(ApplicationInterface $app);
|
||||
|
||||
function run();
|
||||
}
|
@ -26,7 +26,9 @@ class Socket {
|
||||
public function __construct($domain = null, $type = null, $protocol = null) {
|
||||
list($domain, $type, $protocol) = static::getConfig($domain, $type, $protocol);
|
||||
|
||||
if (false === ($this->_socket = socket_create($domain, $type, $protocol))) {
|
||||
$this->_socket = @socket_create($domain, $type, $protocol);
|
||||
|
||||
if (!is_resource($this->_socket)) {
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
|
18
tests/Ratchet/Tests/Mock/Application.php
Normal file
18
tests/Ratchet/Tests/Mock/Application.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
namespace Ratchet\Tests\Mock;
|
||||
use Ratchet\ApplicationInterface;
|
||||
|
||||
class Application implements ApplicationInterface {
|
||||
public function getName() {
|
||||
return 'mock_application';
|
||||
}
|
||||
|
||||
public function onConnect() {
|
||||
}
|
||||
|
||||
public function onMessage() {
|
||||
}
|
||||
|
||||
public function onClose() {
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
namespace Ratchet\Tests;
|
||||
use Ratchet\Server;
|
||||
use Ratchet\Tests\Mock\Socket;
|
||||
use Ratchet\Tests\Mock\Application as TestApp;
|
||||
|
||||
/**
|
||||
* @covers Ratchet\Server
|
||||
@ -17,4 +18,16 @@ class ServerTest extends \PHPUnit_Framework_TestCase {
|
||||
$constraint = $this->isInstanceOf('\\Ratchet\\ServerInterface');
|
||||
$this->assertThat($this->_server, $constraint);
|
||||
}
|
||||
|
||||
public function testServerCanNotRunWithoutApplication() {
|
||||
$this->setExpectedException('\\RuntimeException');
|
||||
$this->_server->run();
|
||||
}
|
||||
|
||||
public function testAttatchedApplicationIsSet() {
|
||||
$app = new TestApp();
|
||||
|
||||
$this->_server->attatchApplication($app);
|
||||
$this->assertAttributeEquals($app, '_app', $this->_server);
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
namespace Ratchet\Tests;
|
||||
use Ratchet\Tests\Mock\Socket;
|
||||
use Ratchet\Socket as RealSocket;
|
||||
|
||||
/**
|
||||
* @covers Ratchet\Socket
|
||||
@ -20,10 +21,21 @@ class SocketTest extends \PHPUnit_Framework_TestCase {
|
||||
$this->_socket = new Socket();
|
||||
}
|
||||
|
||||
public function testGetConfigForConstruct() {
|
||||
/*
|
||||
public function testWhatGoesInConstructComesOut() {
|
||||
$this->assertTrue(false);
|
||||
}
|
||||
*/
|
||||
|
||||
public function testGetDefaultConfigForConstruct() {
|
||||
$ref_conf = static::getMethod('getConfig');
|
||||
$config = $ref_conf->invokeArgs($this->_socket, Array());
|
||||
|
||||
$this->assertEquals(array_values(Socket::$_defaults), $config);
|
||||
}
|
||||
|
||||
public function testInvalidConstructorArguments() {
|
||||
$this->setExpectedException('\\Ratchet\\Exception');
|
||||
$socket = new RealSocket('invalid', 'param', 'derp');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user