Browse Source

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

Daniele Alessandri 14 năm trước cách đây
mục cha
commit
f7bef784af
1 tập tin đã thay đổi với 21 bổ sung4 xóa
  1. 21 4
      lib/Predis.php

+ 21 - 4
lib/Predis.php

@@ -220,8 +220,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);
     }
 
     private static function ensureDefaultSchemes() {
@@ -568,12 +568,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() {
@@ -595,6 +599,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;
     }