From 8a642ab92c537c84960ef3943b34aac95bc39121 Mon Sep 17 00:00:00 2001 From: Devendra Date: Fri, 2 May 2014 01:58:21 +0530 Subject: modifications for susbcribe loop events, connect, disconnect, reconnect --- Pubnub.py | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'Pubnub.py') diff --git a/Pubnub.py b/Pubnub.py index 1bf31e9..3e8fd64 100644 --- a/Pubnub.py +++ b/Pubnub.py @@ -381,7 +381,7 @@ class PubnubBase(object): def get_origin(self): return self.origin - + def grant(self, channel, authkey=False, read=True, write=True, ttl=5, callback=None, error=None): """Grant Access on a Channel.""" @@ -770,7 +770,22 @@ class PubnubCoreAsync(PubnubBase): chobj = self.subscriptions[ch] if chobj['connected'] is False: chobj['connected'] = True + chobj['disconnected'] = False _invoke(chobj['connect'], chobj['name']) + else: + if chobj['disconnected'] is True: + chobj['disconnected'] = False + _invoke(chobj['reconnect'], chobj['name']) + + def _invoke_disconnect(): + if self._channel_list_lock: + with self._channel_list_lock: + for ch in self.subscriptions: + chobj = self.subscriptions[ch] + if chobj['connected'] is True: + if chobj['disconnected'] is False: + chobj['disconnected'] = True + _invoke(chobj['disconnect'], chobj['name']) def _invoke_error(channel_list=None, err=None): if channel_list is None: @@ -796,6 +811,7 @@ class PubnubCoreAsync(PubnubBase): 'name': channel, 'first': False, 'connected': False, + 'disconnected': True, 'subscribed': True, 'callback': callback, 'connect': connect, @@ -823,10 +839,13 @@ class PubnubCoreAsync(PubnubBase): response['message'] == 'Forbidden'): _invoke_error(response['payload'][ 'channels'], response['message']) - _connect() + self.timeout(1, _connect) return if 'message' in response: _invoke_error(err=response['message']) + else: + _invoke_disconnect() + self.timeout(1, _connect) def sub_callback(response): ## ERROR ? @@ -1103,11 +1122,16 @@ def _urllib_request_2(url, timeout=320): s = requests.Session() def _requests_request(url, timeout=320): try: - resp = s.get(url) + resp = s.get(url, timeout=timeout) except requests.exceptions.HTTPError as http_error: resp = http_error except requests.exceptions.ConnectionError as error: - msg = {"message": str(error.reason)} + msg = str(error) + return (json.dumps(msg), 0) + except requests.exceptions.Timeout as error: + #print(error); + #print('timeout'); + msg = str(error) return (json.dumps(msg), 0) return (resp.text, resp.status_code) -- cgit v1.2.3