Skip to content

Commit b442e8c

Browse files
author
root
committed
added event filters
1 parent 31b052e commit b442e8c

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

src/PAMI/Client/Impl/ClientImpl.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,12 @@ protected function dispatch(IncomingMessage $message)
319319
foreach ($this->eventListeners as $data) {
320320
$listener = $data[0];
321321
$predicate = $data[1];
322-
if (is_callable($predicate) && !call_user_func($predicate, $message)) {
322+
323+
if (!$this->evaluatePredicate($predicate, $message))
324+
{
323325
continue;
324326
}
327+
325328
if ($listener instanceof \Closure) {
326329
$listener($message);
327330
} elseif (is_array($listener)) {
@@ -332,6 +335,33 @@ protected function dispatch(IncomingMessage $message)
332335
}
333336
}
334337

338+
/**
339+
* Evaluate a predicate for a message.
340+
*
341+
* @param $predicate a closure or an array of filters.
342+
* @param \PAMI\Message\IncomingMessage $message Message to compare.
343+
*
344+
* @return bool
345+
*/
346+
protected function evaluatePredicate($predicate, IncomingMessage $message)
347+
{
348+
if (is_callable($predicate)) {
349+
return call_user_func($predicate, $message);
350+
}
351+
352+
if (!is_array($predicate)) {
353+
return true;
354+
}
355+
356+
foreach ($predicate as $key => $value) {
357+
if (!preg_match($value, $message->getKey($key))) {
358+
return false;
359+
}
360+
}
361+
362+
return true;
363+
}
364+
335365
/**
336366
* Returns a ResponseMessage from a raw string that came from asterisk.
337367
*

0 commit comments

Comments
 (0)