File tree Expand file tree Collapse file tree 1 file changed +31
-1
lines changed Expand file tree Collapse file tree 1 file changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -319,9 +319,12 @@ protected function dispatch(IncomingMessage $message)
319
319
foreach ($ this ->eventListeners as $ data ) {
320
320
$ listener = $ data [0 ];
321
321
$ predicate = $ data [1 ];
322
- if (is_callable ($ predicate ) && !call_user_func ($ predicate , $ message )) {
322
+
323
+ if (!$ this ->evaluatePredicate ($ predicate , $ message ))
324
+ {
323
325
continue ;
324
326
}
327
+
325
328
if ($ listener instanceof \Closure) {
326
329
$ listener ($ message );
327
330
} elseif (is_array ($ listener )) {
@@ -332,6 +335,33 @@ protected function dispatch(IncomingMessage $message)
332
335
}
333
336
}
334
337
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
+
335
365
/**
336
366
* Returns a ResponseMessage from a raw string that came from asterisk.
337
367
*
You can’t perform that action at this time.
0 commit comments