SSE : Add params support for Handlers.
SSE : Split Handlers in Event and Dataonly git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@6073 bf3deb0d-5f1a-0410-827f-c0cc1f45334c
This commit is contained in:
@@ -70,7 +70,7 @@ class sseTest extends PHPUnit_Framework_TestCase
|
||||
$sse->loop ();
|
||||
}
|
||||
|
||||
public function test_loop_Handler ()
|
||||
public function test_loop_HandlersEvent ()
|
||||
{
|
||||
$this->expectOutputString(str_repeat (": ping\n\n", 4).
|
||||
"event: event1\ndata: will be seen 1\n\n".
|
||||
@@ -80,16 +80,56 @@ class sseTest extends PHPUnit_Framework_TestCase
|
||||
@unlink ("/tmp/dfwTestSSE2");
|
||||
$sse = new sse ();
|
||||
pcntl_signal(SIGALRM, function () {
|
||||
file_put_contents ("/tmp/dfwTestSSE1", "will be seen 1\n");
|
||||
file_put_contents ("/tmp/dfwTestSSE1", "WILL BE SEEN 1\n");
|
||||
file_put_contents ("/tmp/dfwTestSSE2", "WILL BE SEEN 2\n");
|
||||
}, false);
|
||||
pcntl_alarm(3);
|
||||
function lower ($val) {
|
||||
function lowerHandlersEvent ($val) {
|
||||
return strtolower ($val);
|
||||
}
|
||||
$sse->setBackendFiles (["event1" => "/tmp/dfwTestSSE1",
|
||||
"event2" => "/tmp/dfwTestSSE2"])
|
||||
->setHandlers (["event1" => "lower"])
|
||||
->setHandlersEvent (["event1" => "lowerHandlersEvent"])
|
||||
->setPingTime(1);
|
||||
$sse->loop ();
|
||||
}
|
||||
|
||||
public function test_loop_HandlerDataonly ()
|
||||
{
|
||||
$this->expectOutputString(str_repeat (": ping\n\n", 4).
|
||||
"data: will be seen 1\n\n".
|
||||
": ping\n\n");
|
||||
@unlink ("/tmp/dfwTestSSE1");
|
||||
$sse = new sse ();
|
||||
pcntl_signal(SIGALRM, function () {
|
||||
file_put_contents ("/tmp/dfwTestSSE1", "WILL BE SEEN 1\n");
|
||||
}, false);
|
||||
pcntl_alarm(3);
|
||||
function lowerHandlerDataonly ($val) {
|
||||
return strtolower ($val);
|
||||
}
|
||||
$sse->setBackendFiles ("/tmp/dfwTestSSE1")
|
||||
->setHandlerDataonly ("lowerHandlerDataonly")
|
||||
->setPingTime(1);
|
||||
$sse->loop ();
|
||||
}
|
||||
|
||||
public function test_loop_HandlerDataonlyWithParams ()
|
||||
{
|
||||
$this->expectOutputString(str_repeat (": ping\n\n", 4).
|
||||
"data: PREwill be seen 1POST\n\n".
|
||||
": ping\n\n");
|
||||
@unlink ("/tmp/dfwTestSSE1");
|
||||
$sse = new sse ();
|
||||
pcntl_signal(SIGALRM, function () {
|
||||
file_put_contents ("/tmp/dfwTestSSE1", "WILL BE SEEN 1\n");
|
||||
}, false);
|
||||
pcntl_alarm(3);
|
||||
function lowerHandlerDataonly ($val, $param1, $param2) {
|
||||
return $param1.strtolower ($val).$param2;
|
||||
}
|
||||
$sse->setBackendFiles ("/tmp/dfwTestSSE1")
|
||||
->setHandlerDataonly ("lowerHandlerDataonly", "PRE", "POST")
|
||||
->setPingTime(1);
|
||||
$sse->loop ();
|
||||
}
|
||||
|
||||
60
sse.php
60
sse.php
@@ -35,6 +35,9 @@ class sse
|
||||
/** The handlers storage
|
||||
*/
|
||||
private $handlers = array ();
|
||||
/** The handlers parameters
|
||||
*/
|
||||
private $handlersParams = array ();
|
||||
// }}}
|
||||
|
||||
//////////////////////////////
|
||||
@@ -92,23 +95,49 @@ class sse
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The optional handler to use. Must be array of callable methods
|
||||
* @param array|callable $handlers The handler method, array[event=>callable]
|
||||
/** The optional handler to use in DataOnly. Must be callable method
|
||||
* @param callable|null $handler
|
||||
* If callable is null, remove the handler for this event
|
||||
* @param mixed... $params The optional needed parameters
|
||||
*/
|
||||
final public function setHandlers ($handlers)
|
||||
final public function setHandlerDataonly ($handler, $params = null)
|
||||
// {{{
|
||||
{
|
||||
if (! is_callable ($handler) && $handler !== null)
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"SSE : can not use handler : not callable"), 500);
|
||||
$this->handlers["data"] = $handler;
|
||||
$args = func_get_args ();
|
||||
array_shift ($args);
|
||||
$this->handlersParams["data"] = $args;
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** The optional handler to use in Events. Must be array of callable methods
|
||||
* @param array $handlers The handlers method, array[event=>callable]
|
||||
* @param array|mixed $params The parameters of the handlers
|
||||
* array[event=>callable]
|
||||
* If callable is null, remove the handler for this event
|
||||
* @param array|null $params The optional needed parameters
|
||||
* array(event=>array(params))
|
||||
* if event=>null is set, remove the parameters for the event
|
||||
*/
|
||||
final public function setHandlersEvent ($handlers, $params = null)
|
||||
// {{{
|
||||
{
|
||||
if (is_callable ($handlers) || $handlers === null)
|
||||
$handlers = array ("data" => $handlers);
|
||||
if (! is_array ($handlers))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"SSE : can not use handler : not array"), 500);
|
||||
if (! is_array ($params) && $params !== null)
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"SSE : can not use handler params : not array"), 500);
|
||||
foreach ($handlers as $event => $handler)
|
||||
{
|
||||
if ($handler === null && key_exists ($event, $this->handlers))
|
||||
{
|
||||
unset ($this->handlers[$event]);
|
||||
unset ($this->handlersParams[$event]);
|
||||
continue;
|
||||
}
|
||||
if (! is_callable ($handler))
|
||||
@@ -116,6 +145,19 @@ class sse
|
||||
"SSE : can not use handler : not callable"), 500);
|
||||
$this->handlers[$event] = $handler;
|
||||
}
|
||||
if (is_array ($params))
|
||||
{
|
||||
foreach ($params as $event => $param)
|
||||
{
|
||||
if (! key_exists ($event, $this->handlers))
|
||||
throw new \Exception (dgettext ("domframework",
|
||||
"SSE : can not use parameter '$event' : no associated handler"), 500);
|
||||
if ($param === null)
|
||||
unset ($this->handlersParams[$event]);
|
||||
else
|
||||
$this->handlersParams[$event] = $param;
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
// }}}
|
||||
@@ -158,9 +200,15 @@ class sse
|
||||
$data = $this->backendGet ($event);
|
||||
if ($data === false)
|
||||
continue;
|
||||
$data = rtrim ($data);
|
||||
if (key_exists ($event, $this->handlers) &&
|
||||
is_callable ($this->handlers[$event]))
|
||||
$data = call_user_func ($this->handlers[$event], $data);
|
||||
{
|
||||
$array = array ($data);
|
||||
if (key_exists ($event, $this->handlersParams))
|
||||
$array = array_merge ($array, $this->handlersParams[$event]);
|
||||
$data = call_user_func_array ($this->handlers[$event], $array);
|
||||
}
|
||||
if ($data === false)
|
||||
continue;
|
||||
// If the event is data, do not display "event:data", but data:
|
||||
|
||||
Reference in New Issue
Block a user