Jelajahi Sumber

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 14 tahun lalu
induk
melakukan
65c0336d2f
1 mengubah file dengan 14 tambahan dan 2 penghapusan
  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;
         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() {
     public function monitor() {