[WAMP] [BCB] Publishing
BC break: Updated the `WampServerInterface` to have a strict API Exclude and Eligible are now always arrays acting like black/white list Changed `uri` to `topic` to be more generic with Pub/Sub Added unit tests for `onPublish`
This commit is contained in:
parent
598da1e8b0
commit
986edd9562
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Ratchet;
|
namespace Ratchet;
|
||||||
|
|
||||||
const VERSION = 'Ratchet/0.1';
|
const VERSION = 'Ratchet/0.1.2';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A proxy object representing a connection to the application
|
* A proxy object representing a connection to the application
|
||||||
|
@ -34,8 +34,8 @@ class WampConnection extends AbstractConnectionDecorator {
|
|||||||
* @param string A developer-oriented description of the error
|
* @param string A developer-oriented description of the error
|
||||||
* @param string|null An optional human readable detail message to send back
|
* @param string|null An optional human readable detail message to send back
|
||||||
*/
|
*/
|
||||||
public function callError($id, $uri, $desc = '', $details = null) {
|
public function callError($id, $topic, $desc = '', $details = null) {
|
||||||
$data = array(WAMP::MSG_CALL_ERROR, $id, $uri, $desc);
|
$data = array(WAMP::MSG_CALL_ERROR, $id, $topic, $desc);
|
||||||
|
|
||||||
if (null !== $details) {
|
if (null !== $details) {
|
||||||
$data[] = $details;
|
$data[] = $details;
|
||||||
@ -45,11 +45,11 @@ class WampConnection extends AbstractConnectionDecorator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string The URI or CURIE to broadcast to
|
* @param string The topic to broadcast to
|
||||||
* @param mixed Data to send with the event. Anything that is json'able
|
* @param mixed Data to send with the event. Anything that is json'able
|
||||||
*/
|
*/
|
||||||
public function event($uri, $msg) {
|
public function event($topic, $msg) {
|
||||||
$this->send(json_encode(array(WAMP::MSG_EVENT, $uri, $msg)));
|
$this->send(json_encode(array(WAMP::MSG_EVENT, $topic, $msg)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,7 +67,7 @@ class WampConnection extends AbstractConnectionDecorator {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getUri($uri) {
|
public function getUri($uri) {
|
||||||
return (isset($this->WAMP->prefixes[$uri]) ? $this->WAMP->prefixes[$uri] : $uri);
|
return (array_key_exists($uri, $this->WAMP->prefixes) ? $this->WAMP->prefixes[$uri] : $uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -116,7 +116,15 @@ class WampServer implements MessageComponentInterface, WsServerInterface {
|
|||||||
|
|
||||||
case static::MSG_PUBLISH:
|
case static::MSG_PUBLISH:
|
||||||
$exclude = (array_key_exists(3, $json) ? $json[3] : null);
|
$exclude = (array_key_exists(3, $json) ? $json[3] : null);
|
||||||
$eligible = (array_key_exists(4, $json) ? $json[4] : null);
|
if (!is_array($exclude)) {
|
||||||
|
if (true === (boolean)$exclude) {
|
||||||
|
$exclude = array($from->WAMP->sessionId);
|
||||||
|
} else {
|
||||||
|
$exclude = array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$eligible = (array_key_exists(4, $json) ? $json[4] : array());
|
||||||
|
|
||||||
$this->_decorating->onPublish($from, $from->getUri($json[1]), $json[2], $exclude, $eligible);
|
$this->_decorating->onPublish($from, $from->getUri($json[1]), $json[2], $exclude, $eligible);
|
||||||
break;
|
break;
|
||||||
|
@ -10,32 +10,34 @@ use Ratchet\ConnectionInterface;
|
|||||||
interface WampServerInterface extends ComponentInterface {
|
interface WampServerInterface extends ComponentInterface {
|
||||||
/**
|
/**
|
||||||
* An RPC call has been received
|
* An RPC call has been received
|
||||||
* @param Ratchet\Connection
|
* @param Ratchet\ConnectionInterface
|
||||||
* @param string
|
* @param string The unique ID of the RPC, required to respond to
|
||||||
* @param ...
|
* @param string The topic to execute the call against
|
||||||
* @param array Call parameters received from the client
|
* @param array Call parameters received from the client
|
||||||
*/
|
*/
|
||||||
function onCall(ConnectionInterface $conn, $id, $procURI, array $params);
|
function onCall(ConnectionInterface $conn, $id, $topic, array $params);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A request to subscribe to a URI has been made
|
* A request to subscribe to a topic has been made
|
||||||
* @param Ratchet\Connection
|
* @param Ratchet\ConnectionInterface
|
||||||
* @param ...
|
* @param string The topic to subscribe to
|
||||||
*/
|
*/
|
||||||
function onSubscribe(ConnectionInterface $conn, $uri);
|
function onSubscribe(ConnectionInterface $conn, $topic);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A request to unsubscribe from a URI has been made
|
* A request to unsubscribe from a topic has been made
|
||||||
* @param Ratchet\Connection
|
* @param Ratchet\ConnectionInterface
|
||||||
* @param ...
|
* @param The topic to unsubscribe from
|
||||||
*/
|
*/
|
||||||
function onUnSubscribe(ConnectionInterface $conn, $uri);
|
function onUnSubscribe(ConnectionInterface $conn, $topic);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A client is attempting to publish content to a subscribed connections on a URI
|
* A client is attempting to publish content to a subscribed connections on a URI
|
||||||
* @param Ratchet\Connection
|
* @param Ratchet\ConnectionInterface
|
||||||
* @param ...
|
* @param The topic the user has attempted to publish to
|
||||||
* @param string
|
* @param string Payload of the publish
|
||||||
|
* @param array A list of session IDs the message should be excluded from (blacklist)
|
||||||
|
* @param array A list of session Ids the message should be send to (whitelist)
|
||||||
*/
|
*/
|
||||||
function onPublish(ConnectionInterface $conn, $uri, $event, $exclude, $eligible);
|
function onPublish(ConnectionInterface $conn, $topic, $event, array $exclude = array(), array $eligible = array());
|
||||||
}
|
}
|
@ -17,15 +17,15 @@ class WampComponent implements WampServerInterface, WsServerInterface {
|
|||||||
$this->last[__FUNCTION__] = func_get_args();
|
$this->last[__FUNCTION__] = func_get_args();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onSubscribe(ConnectionInterface $conn, $uri) {
|
public function onSubscribe(ConnectionInterface $conn, $topic) {
|
||||||
$this->last[__FUNCTION__] = func_get_args();
|
$this->last[__FUNCTION__] = func_get_args();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onUnSubscribe(ConnectionInterface $conn, $uri) {
|
public function onUnSubscribe(ConnectionInterface $conn, $topic) {
|
||||||
$this->last[__FUNCTION__] = func_get_args();
|
$this->last[__FUNCTION__] = func_get_args();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onPublish(ConnectionInterface $conn, $uri, $event, $exclude, $eligible) {
|
public function onPublish(ConnectionInterface $conn, $topic, $event, array $exclude = array(), array $eligible = array()) {
|
||||||
$this->last[__FUNCTION__] = func_get_args();
|
$this->last[__FUNCTION__] = func_get_args();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,16 +118,43 @@ class WampServerTest extends \PHPUnit_Framework_TestCase {
|
|||||||
$this->assertEquals($paramNum, count($this->_app->last['onCall'][3]));
|
$this->assertEquals($paramNum, count($this->_app->last['onCall'][3]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function publishProvider() {
|
public function testPublish() {
|
||||||
return array(
|
$conn = $this->newConn();
|
||||||
);
|
|
||||||
|
$topic = 'pubsubhubbub';
|
||||||
|
$event = 'Here I am, publishing data';
|
||||||
|
|
||||||
|
$clientMessage = array(7, $topic, $event);
|
||||||
|
|
||||||
|
$this->_comp->onOpen($conn);
|
||||||
|
$this->_comp->onMessage($conn, json_encode($clientMessage));
|
||||||
|
|
||||||
|
$this->assertEquals($topic, $this->_app->last['onPublish'][1]);
|
||||||
|
$this->assertEquals($event, $this->_app->last['onPublish'][2]);
|
||||||
|
$this->assertEquals(array(), $this->_app->last['onPublish'][3]);
|
||||||
|
$this->assertEquals(array(), $this->_app->last['onPublish'][4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function testPublishAndExcludeMe() {
|
||||||
* @dataProvider publishProvider
|
$conn = $this->newConn();
|
||||||
*/
|
|
||||||
public function TODOtestPublish() {
|
$this->_comp->onOpen($conn);
|
||||||
|
$this->_comp->onMessage($conn, json_encode(array(7, 'topic', 'event', true)));
|
||||||
|
|
||||||
|
$this->assertEquals($conn->WAMP->sessionId, $this->_app->last['onPublish'][3][0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPublishAndEligible() {
|
||||||
|
$conn = $this->newConn();
|
||||||
|
|
||||||
|
$buddy = uniqid();
|
||||||
|
$friend = uniqid();
|
||||||
|
|
||||||
|
$this->_comp->onOpen($conn);
|
||||||
|
$this->_comp->onMessage($conn, json_encode(array(7, 'topic', 'event', false, array($buddy, $friend))));
|
||||||
|
|
||||||
|
$this->assertEquals(array(), $this->_app->last['onPublish'][3]);
|
||||||
|
$this->assertEquals(2, count($this->_app->last['onPublish'][4]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function eventProvider() {
|
public function eventProvider() {
|
||||||
|
Loading…
Reference in New Issue
Block a user