diff options
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) | 
