Ver Fonte

Add inline (p)subscribe via options on Predis\PubSubContext initialization.

Daniele Alessandri há 14 anos atrás
pai
commit
79372cb99b
2 ficheiros alterados com 24 adições e 4 exclusões
  1. 3 0
      CHANGELOG
  2. 21 4
      lib/Predis.php

+ 3 - 0
CHANGELOG

@@ -6,6 +6,9 @@ v0.6.4 (2011-??-??)
     specify an external callback (or any callable object) that gets invoked 
     whenever a transaction is aborted by the server.
 
+  * Added inline (p)subscribtion via options when initializing an instance of 
+    Predis\PubSubContext.
+
 v0.6.3 (2011-01-01)
   * New commands available in the Redis v2.2 profile (dev):
       - Strings: SETRANGE, GETRANGE, SETBIT, GETBIT

+ 21 - 4
lib/Predis.php

@@ -287,8 +287,8 @@ class Client {
         return $transBlock !== null ? $multi->execute($transBlock) : $multi;
     }
 
-    public function pubSubContext() {
-        return new PubSubContext($this);
+    public function pubSubContext(Array $options = null) {
+        return new PubSubContext($this, $options);
     }
 }
 
@@ -1047,12 +1047,16 @@ class PubSubContext implements \Iterator {
     const STATUS_SUBSCRIBED  = 0x0010;
     const STATUS_PSUBSCRIBED = 0x0100;
 
-    private $_redisClient, $_position;
+    private $_redisClient, $_position, $_options;
 
-    public function __construct(Client $redisClient) {
+    public function __construct(Client $redisClient, Array $options = null) {
         $this->checkCapabilities($redisClient);
+        $this->_options = $options ?: array();
         $this->_redisClient = $redisClient;
         $this->_statusFlags = self::STATUS_VALID;
+
+        $this->genericSubscribeInit('subscribe');
+        $this->genericSubscribeInit('psubscribe');
     }
 
     public function __destruct() {
@@ -1074,6 +1078,19 @@ class PubSubContext implements \Iterator {
         }
     }
 
+    private function genericSubscribeInit($subscribeAction) {
+        if (isset($this->_options[$subscribeAction])) {
+            if (is_array($this->_options[$subscribeAction])) {
+                foreach ($this->_options[$subscribeAction] as $subscription) {
+                    $this->$subscribeAction($subscription);
+                }
+            }
+            else {
+                $this->$subscribeAction($this->_options[$subscribeAction]);
+            }
+        }
+    }
+
     private function isFlagSet($value) {
         return ($this->_statusFlags & $value) === $value;
     }