diff --git a/ws4redis/redis_store.py b/ws4redis/redis_store.py index 5cde46fa..584b9af7 100644 --- a/ws4redis/redis_store.py +++ b/ws4redis/redis_store.py @@ -76,6 +76,12 @@ def __new__(cls, value): elif isinstance(value, list): if len(value) >= 2 and value[0] == b'message': return super(RedisMessage, cls).__new__(cls, value[2]) + if len(value) >= 3 and value[0] == b'pmessage': + if settings.WS4REDIS_PREFIX: + channel = ":".join(value[2].split(":")[2:]) + else: + channel = value[2][value[2].index(":")+1:] + return super(RedisMessage, cls).__new__(cls, json.dumps({channel: value[3]})) else: if isinstance(value, (six.string_types, bytearray)): if value != settings.WS4REDIS_HEARTBEAT: @@ -83,6 +89,12 @@ def __new__(cls, value): elif isinstance(value, list): if len(value) >= 2 and value[0] == 'message': return six.binary_type.__new__(cls, value[2]) + elif len(value) >= 3 and value[0] == 'pmessage': + if settings.WS4REDIS_PREFIX: + channel = ":".join(value[2].split(":")[2:]) + else: + channel = value[2][value[2].index(":")+1:] + return six.binary_type.__new__(cls, json.dumps({channel: value[3]})) return None diff --git a/ws4redis/subscriber.py b/ws4redis/subscriber.py index ffaed00e..c7f3d4a8 100644 --- a/ws4redis/subscriber.py +++ b/ws4redis/subscriber.py @@ -46,7 +46,10 @@ def set_pubsub_channels(self, request, channels): } self._subscription = self._connection.pubsub() for key in self._get_message_channels(request=request, facility=facility, **audience): - self._subscription.subscribe(key) + if '*' in key: + self._subscription.psubscribe(key) + else: + self._subscription.subscribe(key) def send_persisted_messages(self, websocket): """