aboutsummaryrefslogtreecommitdiffstats
path: root/python/unassembled
diff options
context:
space:
mode:
authorDevendra2014-04-02 02:44:29 +0530
committerDevendra2014-04-02 02:44:29 +0530
commit765ee5db6fc39d77e55dcf4fe97fb96da2f46d30 (patch)
treeec6e9e2d102e866ae1b54a43d805607f0c62b8c2 /python/unassembled
parent9ac3ccf6283772b404a0c80945e3cdf3406ac5bf (diff)
downloadpubnub-python-765ee5db6fc39d77e55dcf4fe97fb96da2f46d30.tar.bz2
multiplexing support
Diffstat (limited to 'python/unassembled')
-rw-r--r--python/unassembled/Platform.py82
1 files changed, 73 insertions, 9 deletions
diff --git a/python/unassembled/Platform.py b/python/unassembled/Platform.py
index c60690f..f0f9327 100644
--- a/python/unassembled/Platform.py
+++ b/python/unassembled/Platform.py
@@ -3,6 +3,34 @@ try:
except:
import urllib2
+import threading
+import json
+import time
+
+current_req_id = -1
+
+class HTTPClient:
+ def __init__(self, url, callback, id=None):
+ self.url = url
+ self.id = id
+ self.callback = callback
+ self.stop = False
+
+ def cancel(self):
+ self.stop = True
+ 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:
+ self.callback(json.loads(data))
+
+
class Pubnub(PubnubCore):
def __init__(
self,
@@ -28,7 +56,33 @@ class Pubnub(PubnubCore):
else:
self._request = self._request3
- def _request2( self, request, callback = None ) :
+ def timeout(self, interval, func):
+ def cb():
+ time.sleep(interval)
+ func()
+ thread = threading.Thread(target=cb)
+ 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
+ else:
+ client = HTTPClient(url, callback)
+
+ thread = threading.Thread(target=client.run)
+ thread.start()
+ def abort():
+ client.cancel();
+ return abort
+
+
+ def _request2_sync( self, request) :
+
## Build URL
url = self.getUrl(request)
@@ -42,13 +96,18 @@ class Pubnub(PubnubCore):
except:
return None
- if (callback):
- callback(resp_json)
- else:
return resp_json
- def _request3( self, request, callback = None ) :
+ def _request2(self, request, callback=None, single=False):
+ if callback is None:
+ return self._request2_sync(request,single=single)
+ else:
+ self._request2_async(request, callback, single=single)
+
+
+
+ def _request3_sync( self, request) :
## Build URL
url = self.getUrl(request)
## Send Request Expecting JSONP Response
@@ -56,10 +115,15 @@ class Pubnub(PubnubCore):
response = urllib.request.urlopen(url,timeout=310)
resp_json = json.loads(response.read().decode("utf-8"))
except Exception as e:
- print(e)
return None
- if (callback):
- callback(resp_json)
+ return resp_json
+
+ def _request3_async( self, request, callback, single=False ) :
+ pass
+
+ def _request3(self, request, callback=None, single=False):
+ if callback is None:
+ return self._request3_sync(request,single=single)
else:
- return resp_json
+ self._request3_async(request, callback, single=single)