diff options
Diffstat (limited to 'Pubnub.py')
| -rw-r--r-- | Pubnub.py | 90 |
1 files changed, 77 insertions, 13 deletions
@@ -643,6 +643,33 @@ class PubnubBase(object): else: return None + def leave_channel(self, channel, callback=None, error=None): + ## Send leave + return self._request({"urlcomponents": [ + 'v2', 'presence', + 'sub_key', + self.subscribe_key, + 'channel', + channel, + 'leave' + ], 'urlparams': {'auth': self.auth_key, 'pnsdk' : self.pnsdk, "uuid": self.uuid,}}, + callback=self._return_wrapped_callback(callback), + error=self._return_wrapped_callback(error)) + + def leave_group(self, channel_group, callback=None, error=None): + ## Send leave + return self._request({"urlcomponents": [ + 'v2', 'presence', + 'sub_key', + self.subscribe_key, + 'channel', + ',', + 'leave' + ], 'urlparams': {'auth': self.auth_key, 'pnsdk' : self.pnsdk, 'channel-group' : channel_group, "uuid": self.uuid,}}, + callback=self._return_wrapped_callback(callback), + error=self._return_wrapped_callback(error)) + + def publish(self, channel, message, callback=None, error=None): """Publishes data on a channel. @@ -718,6 +745,25 @@ class PubnubBase(object): """ return self.subscribe(channel+'-pnpres', callback=callback) + def presence_group(self, channel_group, callback, error=None): + """Subscribe to presence data on a channel group. + + Only works in async mode + + Args: + channel_group: Channel group name ( string ) on which to publish message + callback: A callback method should be passed to the method. + If set, the api works in async mode. + Required argument when working with twisted or tornado . + error: Optional variable. An error method can be passed to the method. + If set, the api works in async mode. + Required argument when working with twisted or tornado . + + Returns: + None + """ + return self.subscribe_group(channel_group+'-pnpres', callback=callback) + def here_now(self, channel, callback=None, error=None): """Get here now data. @@ -1164,9 +1210,14 @@ class PubnubCoreAsync(PubnubBase): self.subscribe_sync(args) return - def _invoke(func, msg=None, channel=None): + def _invoke(func, msg=None, channel=None, real_channel=None): if func is not None: - if msg is not None and channel is not None: + if msg is not None and channel is not None and real_channel is not None: + try: + func(get_data_for_user(msg), channel, real_channel) + except: + func(get_data_for_user(msg), channel) + elif msg is not None and channel is not None: func(get_data_for_user(msg), channel) elif msg is not None: func(get_data_for_user(msg)) @@ -1340,7 +1391,7 @@ class PubnubCoreAsync(PubnubBase): chobj = self.subscriptions[ch[1]] _invoke(chobj['callback'], self.decrypt(response_list[ch[0]]), - channel_list_2[ch[0]]) + chobj['name'], channel_list_2[ch[0]]) elif len(response) > 2: channel_list = response[2].split(',') response_list = response[0] @@ -1404,21 +1455,12 @@ class PubnubCoreAsync(PubnubBase): self._connect() def unsubscribe(self, channel): - """Subscribe to presence data on a channel. + """Unsubscribe from channel . Only works in async mode Args: channel: Channel name ( string ) on which to publish message - message: Message to be published ( String / int / double / dict / list ). - callback: A callback method should be passed to the method. - If set, the api works in async mode. - Required argument when working with twisted or tornado . - error: Optional variable. An error method can be passed to the method. - If set, the api works in async mode. - Required argument when working with twisted or tornado . - Returns: - Returns a list in sync mode i.e. when callback argument is not given """ if channel in self.subscriptions is False: return False @@ -1430,6 +1472,28 @@ class PubnubCoreAsync(PubnubBase): self.subscriptions[channel]['subscribed'] = False self.subscriptions[channel]['timetoken'] = 0 self.subscriptions[channel]['first'] = False + self.leave_channel(channel=channel) + self.CONNECT() + + def unsubscribe_group(self, channel_group): + """Unsubscribe from channel group. + Only works in async mode + + Args: + channel_group: Channel group name ( string ) on which to publish message + + """ + if channel_group in self.subscription_groups is False: + return False + + ## DISCONNECT + with self._channel_group_list_lock: + if channel_group in self.subscription_groups: + self.subscription_groups[channel_group]['connected'] = 0 + self.subscription_groups[channel_group]['subscribed'] = False + self.subscription_groups[channel_group]['timetoken'] = 0 + self.subscription_groups[channel_group]['first'] = False + self.leave_group(channel_group=channel_group) self.CONNECT() |
