Browse Source

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 13 năm trước cách đây
mục cha
commit
65c0336d2f
1 tập tin đã thay đổi với 14 bổ sung2 xóa
  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() {