aboutsummaryrefslogtreecommitdiffstats
path: root/python/unassembled/Platform.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/unassembled/Platform.py')
-rw-r--r--python/unassembled/Platform.py41
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)