[Sessions] Decouple interface from WS, align with HTTP
This commit is contained in:
parent
e1ced856cc
commit
c11ecd9fb4
@ -2,7 +2,8 @@
|
||||
namespace Ratchet\Session;
|
||||
use Ratchet\MessageComponentInterface;
|
||||
use Ratchet\ConnectionInterface;
|
||||
use Ratchet\WebSocket\WsServerInterface;
|
||||
use Ratchet\Http\HttpServerInterface;
|
||||
use Guzzle\Http\Message\RequestInterface;
|
||||
use Ratchet\Session\Storage\VirtualSessionStorage;
|
||||
use Ratchet\Session\Serialize\HandlerInterface;
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
@ -14,7 +15,7 @@ use Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler;
|
||||
* Your website must also use Symfony HttpFoundation Sessions to read your sites session data
|
||||
* If your are not using at least PHP 5.4 you must include a SessionHandlerInterface stub (is included in Symfony HttpFoundation, loaded w/ composer)
|
||||
*/
|
||||
class SessionProvider implements MessageComponentInterface, WsServerInterface {
|
||||
class SessionProvider implements HttpServerInterface {
|
||||
/**
|
||||
* @var \Ratchet\MessageComponentInterface
|
||||
*/
|
||||
@ -76,8 +77,8 @@ class SessionProvider implements MessageComponentInterface, WsServerInterface {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
function onOpen(ConnectionInterface $conn) {
|
||||
if (!isset($conn->WebSocket) || null === ($id = $conn->WebSocket->request->getCookie(ini_get('session.name')))) {
|
||||
public function onOpen(ConnectionInterface $conn, RequestInterface $request = null) {
|
||||
if (null === $request || null === ($id = $request->getCookie(ini_get('session.name')))) {
|
||||
$saveHandler = $this->_null;
|
||||
$id = '';
|
||||
} else {
|
||||
@ -116,17 +117,6 @@ class SessionProvider implements MessageComponentInterface, WsServerInterface {
|
||||
return $this->_app->onError($conn, $e);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getSubProtocols() {
|
||||
if ($this->_app instanceof WsServerInterface) {
|
||||
return $this->_app->getSubProtocols();
|
||||
} else {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all the php session. ini options
|
||||
* © Symfony
|
||||
|
@ -1,11 +1,9 @@
|
||||
<?php
|
||||
namespace Ratchet\Session;
|
||||
use Ratchet\AbstractMessageComponentTestCase;
|
||||
use Ratchet\Session\SessionProvider;
|
||||
use Ratchet\Mock\MemorySessionHandler;
|
||||
use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler;
|
||||
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler;
|
||||
use Guzzle\Http\Message\Request;
|
||||
|
||||
/**
|
||||
* @covers Ratchet\Session\SessionProvider
|
||||
@ -85,10 +83,7 @@ class SessionProviderTest extends AbstractMessageComponentTestCase {
|
||||
$headers = $this->getMock('Guzzle\\Http\\Message\\Request', array('getCookie'), array('POST', '/', array()));
|
||||
$headers->expects($this->once())->method('getCookie', array(ini_get('session.name')))->will($this->returnValue($sessionId));
|
||||
|
||||
$connection->WebSocket = new \StdClass;
|
||||
$connection->WebSocket->request = $headers;
|
||||
|
||||
$component->onOpen($connection);
|
||||
$component->onOpen($connection, $headers);
|
||||
|
||||
$this->assertEquals('world', $connection->Session->get('hello'));
|
||||
}
|
||||
@ -99,9 +94,6 @@ class SessionProviderTest extends AbstractMessageComponentTestCase {
|
||||
$headers = $this->getMock('Guzzle\Http\Message\Request', array('getCookie'), array('POST', '/', array()));
|
||||
$headers->expects($this->once())->method('getCookie', array(ini_get('session.name')))->will($this->returnValue(null));
|
||||
|
||||
$conn->WebSocket = new \StdClass;
|
||||
$conn->WebSocket->request = $headers;
|
||||
|
||||
return $conn;
|
||||
}
|
||||
|
||||
@ -111,21 +103,6 @@ class SessionProviderTest extends AbstractMessageComponentTestCase {
|
||||
$this->_serv->onMessage($this->_conn, $message);
|
||||
}
|
||||
|
||||
public function testGetSubProtocolsReturnsArray() {
|
||||
$mock = $this->getMock('Ratchet\\MessageComponentInterface');
|
||||
$comp = new SessionProvider($mock, new NullSessionHandler);
|
||||
|
||||
$this->assertInternalType('array', $comp->getSubProtocols());
|
||||
}
|
||||
|
||||
public function testGetSubProtocolsGetFromApp() {
|
||||
$mock = $this->getMock('Ratchet\WebSocket\Stub\WsMessageComponentInterface');
|
||||
$mock->expects($this->once())->method('getSubProtocols')->will($this->returnValue(array('hello', 'world')));
|
||||
$comp = new SessionProvider($mock, new NullSessionHandler);
|
||||
|
||||
$this->assertGreaterThanOrEqual(2, count($comp->getSubProtocols()));
|
||||
}
|
||||
|
||||
public function testRejectInvalidSeralizers() {
|
||||
if (!function_exists('wddx_serialize_value')) {
|
||||
$this->markTestSkipped();
|
||||
|
Loading…
Reference in New Issue
Block a user