diff --git a/src/Ratchet/Session/SessionProvider.php b/src/Ratchet/Session/SessionProvider.php index a8495b2..043b3ab 100644 --- a/src/Ratchet/Session/SessionProvider.php +++ b/src/Ratchet/Session/SessionProvider.php @@ -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 */ @@ -38,13 +39,13 @@ class SessionProvider implements MessageComponentInterface, WsServerInterface { protected $_serializer; /** - * @param \Ratchet\MessageComponentInterface $app + * @param \Ratchet\HttpServerInterface $app * @param \SessionHandlerInterface $handler * @param array $options * @param \Ratchet\Session\Serialize\HandlerInterface $serializer * @throws \RuntimeException */ - public function __construct(MessageComponentInterface $app, \SessionHandlerInterface $handler, array $options = array(), HandlerInterface $serializer = null) { + public function __construct(HttpServerInterface $app, \SessionHandlerInterface $handler, array $options = array(), HandlerInterface $serializer = null) { $this->_app = $app; $this->_handler = $handler; $this->_null = new NullSessionHandler; @@ -70,8 +71,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 { @@ -84,7 +85,7 @@ class SessionProvider implements MessageComponentInterface, WsServerInterface { $conn->Session->start(); } - return $this->_app->onOpen($conn); + return $this->_app->onOpen($conn, $request); } /** @@ -110,17 +111,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 diff --git a/tests/unit/Session/SessionComponentTest.php b/tests/unit/Session/SessionComponentTest.php index 7f91639..e889637 100644 --- a/tests/unit/Session/SessionComponentTest.php +++ b/tests/unit/Session/SessionComponentTest.php @@ -1,11 +1,9 @@ getMethod('toClassCase'); $method->setAccessible(true); - $component = new SessionProvider($this->getMock('Ratchet\\MessageComponentInterface'), $this->getMock('\SessionHandlerInterface')); + $component = new SessionProvider($this->getMock($this->getComponentClassString()), $this->getMock('\SessionHandlerInterface')); $this->assertEquals($out, $method->invokeArgs($component, array($in))); } @@ -82,16 +80,13 @@ class SessionProviderTest extends AbstractMessageComponentTestCase { $pdoHandler = new PdoSessionHandler($pdo, $dbOptions); $pdoHandler->write($sessionId, '_sf2_attributes|a:2:{s:5:"hello";s:5:"world";s:4:"last";i:1332872102;}_sf2_flashes|a:0:{}'); - $component = new SessionProvider($this->getMock('Ratchet\\MessageComponentInterface'), $pdoHandler, array('auto_start' => 1)); + $component = new SessionProvider($this->getMock($this->getComponentClassString()), $pdoHandler, array('auto_start' => 1)); $connection = $this->getMock('Ratchet\\ConnectionInterface'); $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')); } @@ -102,9 +97,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; } @@ -114,21 +106,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(); @@ -136,6 +113,6 @@ class SessionProviderTest extends AbstractMessageComponentTestCase { ini_set('session.serialize_handler', 'wddx'); $this->setExpectedException('\RuntimeException'); - new SessionProvider($this->getMock('\Ratchet\MessageComponentInterface'), $this->getMock('\SessionHandlerInterface')); + new SessionProvider($this->getMock($this->getComponentClassString()), $this->getMock('\SessionHandlerInterface')); } }