浏览代码

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 年之前
父节点
当前提交
65c0336d2f
共有 1 个文件被更改,包括 14 次插入2 次删除
  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() {