Procházet zdrojové kódy

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 před 13 roky
rodič
revize
65c0336d2f
1 změnil soubory, kde provedl 14 přidání a 2 odebrání
  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() {