diff options
| author | Devendra | 2014-04-11 14:49:43 +0530 |
|---|---|---|
| committer | Devendra | 2014-04-11 14:49:43 +0530 |
| commit | 99096b8c11b9a541f6350639e8735495cf90091c (patch) | |
| tree | 446e63037f76cb98d7e3cc0f93316a8bce96e19e /python/unassembled/Platform.py | |
| parent | 765ee5db6fc39d77e55dcf4fe97fb96da2f46d30 (diff) | |
| download | pubnub-python-99096b8c11b9a541f6350639e8735495cf90091c.tar.bz2 | |
v1 MX and async code for python, twisted, tornado
Diffstat (limited to 'python/unassembled/Platform.py')
| -rw-r--r-- | python/unassembled/Platform.py | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/python/unassembled/Platform.py b/python/unassembled/Platform.py index f0f9327..22893f8 100644 --- a/python/unassembled/Platform.py +++ b/python/unassembled/Platform.py @@ -6,8 +6,11 @@ except: import threading import json import time +import threading +from threading import current_thread -current_req_id = -1 +latest_sub_callback_lock = threading.RLock() +latest_sub_callback = {'id' : None, 'callback' : None} class HTTPClient: def __init__(self, url, callback, id=None): @@ -21,23 +24,32 @@ class HTTPClient: self.callback = None def run(self): - global current_req_id data = urllib2.urlopen(self.url, timeout=310).read() if self.stop is True: return - if self.id is not None and current_req_id != self.id: - return - if self.callback is not None: + if self.callback is None: + global latest_sub_callback + global latest_sub_callback_lock + with latest_sub_callback_lock: + if latest_sub_callback['id'] != self.id: + return + else: + print(data) + if latest_sub_callback['callback'] is not None: + latest_sub_callback['id'] = 0 + latest_sub_callback['callback'](json.loads(data)) + else: self.callback(json.loads(data)) -class Pubnub(PubnubCore): +class Pubnub(PubnubCoreAsync): def __init__( self, publish_key, subscribe_key, secret_key = False, cipher_key = False, + auth_key = None, ssl_on = False, origin = 'pubsub.pubnub.com', pres_uuid = None @@ -47,6 +59,7 @@ class Pubnub(PubnubCore): subscribe_key = subscribe_key, secret_key = secret_key, cipher_key = cipher_key, + auth_key = auth_key, ssl_on = ssl_on, origin = origin, uuid = pres_uuid @@ -55,6 +68,7 @@ class Pubnub(PubnubCore): self._request = self._request2 else: self._request = self._request3 + self._channel_list_lock = threading.RLock() def timeout(self, interval, func): def cb(): @@ -64,13 +78,14 @@ class Pubnub(PubnubCore): thread.start() def _request2_async( self, request, callback, single=False ) : - global current_req_id ## Build URL url = self.getUrl(request) if single is True: id = time.time() - client = HTTPClient(url, callback, id) - current_req_id = id + client = HTTPClient(url, None, id) + with latest_sub_callback_lock: + latest_sub_callback['id'] = id + latest_sub_callback['callback'] = callback else: client = HTTPClient(url, callback) @@ -85,7 +100,6 @@ class Pubnub(PubnubCore): ## Build URL url = self.getUrl(request) - ## Send Request Expecting JSONP Response try: try: usock = urllib2.urlopen( url, None, 310 ) @@ -93,15 +107,16 @@ class Pubnub(PubnubCore): response = usock.read() usock.close() resp_json = json.loads(response) - except: + except Exception as e: + print e return None - return resp_json + return resp_json def _request2(self, request, callback=None, single=False): if callback is None: - return self._request2_sync(request,single=single) + return self._request2_sync(request) else: self._request2_async(request, callback, single=single) |
