Merge branch 'router-race-fix'
This commit is contained in:
commit
5dbbbbeb75
18
src/Ratchet/Http/NoOpHttpServerController.php
Normal file
18
src/Ratchet/Http/NoOpHttpServerController.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
namespace Ratchet\Http;
|
||||||
|
use Ratchet\ConnectionInterface;
|
||||||
|
use Psr\Http\Message\RequestInterface;
|
||||||
|
|
||||||
|
class NoOpHttpServerController implements HttpServerInterface {
|
||||||
|
public function onOpen(ConnectionInterface $conn, RequestInterface $request = null) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onMessage(ConnectionInterface $from, $msg) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onClose(ConnectionInterface $conn) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onError(ConnectionInterface $conn, \Exception $e) {
|
||||||
|
}
|
||||||
|
}
|
@ -15,8 +15,11 @@ class Router implements HttpServerInterface {
|
|||||||
*/
|
*/
|
||||||
protected $_matcher;
|
protected $_matcher;
|
||||||
|
|
||||||
|
private $_noopController;
|
||||||
|
|
||||||
public function __construct(UrlMatcherInterface $matcher) {
|
public function __construct(UrlMatcherInterface $matcher) {
|
||||||
$this->_matcher = $matcher;
|
$this->_matcher = $matcher;
|
||||||
|
$this->_noopController = new NoOpHttpServerController;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -28,6 +31,8 @@ class Router implements HttpServerInterface {
|
|||||||
throw new \UnexpectedValueException('$request can not be null');
|
throw new \UnexpectedValueException('$request can not be null');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$conn->controller = $this->_noopController;
|
||||||
|
|
||||||
$uri = $request->getUri();
|
$uri = $request->getUri();
|
||||||
|
|
||||||
$context = $this->_matcher->getContext();
|
$context = $this->_matcher->getContext();
|
||||||
@ -67,14 +72,14 @@ class Router implements HttpServerInterface {
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
function onMessage(ConnectionInterface $from, $msg) {
|
public function onMessage(ConnectionInterface $from, $msg) {
|
||||||
$from->controller->onMessage($from, $msg);
|
$from->controller->onMessage($from, $msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
function onClose(ConnectionInterface $conn) {
|
public function onClose(ConnectionInterface $conn) {
|
||||||
if (isset($conn->controller)) {
|
if (isset($conn->controller)) {
|
||||||
$conn->controller->onClose($conn);
|
$conn->controller->onClose($conn);
|
||||||
}
|
}
|
||||||
@ -83,7 +88,7 @@ class Router implements HttpServerInterface {
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
function onError(ConnectionInterface $conn, \Exception $e) {
|
public function onError(ConnectionInterface $conn, \Exception $e) {
|
||||||
if (isset($conn->controller)) {
|
if (isset($conn->controller)) {
|
||||||
$conn->controller->onError($conn, $e);
|
$conn->controller->onError($conn, $e);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,10 @@ namespace Ratchet\Http;
|
|||||||
use Ratchet\WebSocket\WsServerInterface;
|
use Ratchet\WebSocket\WsServerInterface;
|
||||||
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
||||||
use Symfony\Component\Routing\Matcher\UrlMatcherInterface;
|
use Symfony\Component\Routing\Matcher\UrlMatcherInterface;
|
||||||
|
use Symfony\Component\Routing\RequestContext;
|
||||||
|
use Symfony\Component\Routing\RouteCollection;
|
||||||
|
use Symfony\Component\Routing\Matcher\UrlMatcher;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers Ratchet\Http\Router
|
* @covers Ratchet\Http\Router
|
||||||
@ -142,4 +146,20 @@ class RouterTest extends \PHPUnit_Framework_TestCase {
|
|||||||
$this->assertEquals('ws', $request->getUri()->getScheme());
|
$this->assertEquals('ws', $request->getUri()->getScheme());
|
||||||
$this->assertEquals('doesnt.matter', $request->getUri()->getHost());
|
$this->assertEquals('doesnt.matter', $request->getUri()->getHost());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testImpatientClientOverflow() {
|
||||||
|
$this->_conn->expects($this->once())->method('close');
|
||||||
|
|
||||||
|
$header = "GET /nope HTTP/1.1
|
||||||
|
Upgrade: websocket
|
||||||
|
Connection: upgrade
|
||||||
|
Host: localhost
|
||||||
|
Origin: http://localhost
|
||||||
|
Sec-WebSocket-Version: 13\r\n\r\n";
|
||||||
|
|
||||||
|
$app = new HttpServer(new Router(new UrlMatcher(new RouteCollection, new RequestContext)));
|
||||||
|
$app->onOpen($this->_conn);
|
||||||
|
$app->onMessage($this->_conn, $header);
|
||||||
|
$app->onMessage($this->_conn, 'Silly body');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user