diff --git a/src/Ratchet/Session/SessionProvider.php b/src/Ratchet/Session/SessionProvider.php index 8aefc96..f9f2462 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; @@ -77,8 +78,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 { @@ -91,7 +92,7 @@ class SessionProvider implements MessageComponentInterface, WsServerInterface { $conn->Session->start(); } - return $this->_app->onOpen($conn); + return $this->_app->onOpen($conn, $request); } /** @@ -117,17 +118,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 c91f13e..c7df77d 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))); } @@ -79,16 +77,13 @@ class SessionProviderTest extends AbstractMessageComponentTestCase { $pdo->exec(vsprintf("CREATE TABLE %s (%s VARCHAR(255) PRIMARY KEY, %s TEXT, %s INTEGER)", $dbOptions)); $pdo->prepare(vsprintf("INSERT INTO %s (%s, %s, %s) VALUES (?, ?, ?)", $dbOptions))->execute(array($sessionId, base64_encode('_sf2_attributes|a:2:{s:5:"hello";s:5:"world";s:4:"last";i:1332872102;}_sf2_flashes|a:0:{}'), time())); - $component = new SessionProvider($this->getMock('Ratchet\\MessageComponentInterface'), new PdoSessionHandler($pdo, $dbOptions), array('auto_start' => 1)); + $component = new SessionProvider($this->getMock($this->getComponentClassString()), new PdoSessionHandler($pdo, $dbOptions), 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')); } @@ -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(); @@ -133,6 +110,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')); } }