Quellcode durchsuchen

Use the shared initializer to initialize Pub/Sub and accept callbacks.

When a callback is specified, the client does not return a new instance
of Predis\PubSubContext but it invokes that callback on each message
received. The context can be aborted simply by returning FALSE from the
callback.
Daniele Alessandri vor 13 Jahren
Ursprung
Commit
65c0336d2f
1 geänderte Dateien mit 14 neuen und 2 gelöschten Zeilen
  1. 14 2
      lib/Predis/Client.php

+ 14 - 2
lib/Predis/Client.php

@@ -201,8 +201,20 @@ class Client {
         return isset($block) ? $transaction->execute($block) : $transaction;
     }
 
-    public function pubSubContext(Array $options = null) {
-        return new PubSubContext($this, $options);
+    public function pubSubContext(/* arguments */) {
+        return $this->sharedInitializer(func_get_args(), 'initPubSub');
+    }
+
+    protected function initPubSub(Array $options = null, $block = null) {
+        $pubsub = new PubSubContext($this, $options);
+        if (!isset($block)) {
+            return $pubsub;
+        }
+        foreach ($pubsub as $message) {
+            if ($block($pubsub, $message) === false) {
+                $pubsub->closeContext();
+            }
+        }
     }
 
     public function monitor() {