summaryrefslogtreecommitdiffstats
path: root/module/remote/wsbackend/AsyncHandler.py
diff options
context:
space:
mode:
authorGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2013-03-11 19:49:20 +0100
committerGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2013-03-11 19:50:54 +0100
commit763b142db70ce77952cb46cfccf84d9800f15651 (patch)
treed2636e48766d365bd8a9d079de603b127ab88744 /module/remote/wsbackend/AsyncHandler.py
parentMerge pull request #33 from stickell/patch-3 (diff)
downloadpyload-763b142db70ce77952cb46cfccf84d9800f15651.tar.xz
websocket login via session, websocket pushes server status, webui renders server status
Diffstat (limited to 'module/remote/wsbackend/AsyncHandler.py')
-rw-r--r--module/remote/wsbackend/AsyncHandler.py35
1 files changed, 21 insertions, 14 deletions
diff --git a/module/remote/wsbackend/AsyncHandler.py b/module/remote/wsbackend/AsyncHandler.py
index a8382a211..2f9b43ad2 100644
--- a/module/remote/wsbackend/AsyncHandler.py
+++ b/module/remote/wsbackend/AsyncHandler.py
@@ -16,7 +16,7 @@
# @author: RaNaN
###############################################################################
-from Queue import Queue
+from Queue import Queue, Empty
from threading import Lock
from mod_pywebsocket.msgutil import receive_message
@@ -34,13 +34,13 @@ class AsyncHandler(AbstractHandler):
Progress information are continuous and will be pushed in a fixed interval when available.
After connect you have to login and can set the interval by sending the json command ["setInterval", xy].
- To start receiving updates call "start", afterwards no more incoming messages will be accept!
+ To start receiving updates call "start", afterwards no more incoming messages will be accepted!
"""
PATH = "/async"
COMMAND = "start"
- PROGRESS_INTERVAL = 1
+ PROGRESS_INTERVAL = 2
STATUS_INTERVAL = 60
def __init__(self, api):
@@ -57,7 +57,10 @@ class AsyncHandler(AbstractHandler):
@lock
def on_close(self, req):
- self.clients.remove(req)
+ try:
+ self.clients.remove(req)
+ except ValueError: # ignore when not in list
+ pass
@lock
def add_event(self, event):
@@ -86,21 +89,15 @@ class AsyncHandler(AbstractHandler):
return # Result was already sent
if func == 'login':
- user = self.api.checkAuth(*args, **kwargs)
- if user:
- req.api = self.api.withUserContext(user.uid)
- return self.send_result(req, self.OK, True)
-
- else:
- return self.send_result(req, self.FORBIDDEN, "Forbidden")
+ return self.do_login(req, args, kwargs)
elif func == 'logout':
- req.api = None
- return self.send_result(req, self.OK, True)
+ return self.do_logout(req)
else:
if not req.api:
return self.send_result(req, self.FORBIDDEN, "Forbidden")
+
if func == "setInterval":
req.interval = args[0]
elif func == self.COMMAND:
@@ -109,4 +106,14 @@ class AsyncHandler(AbstractHandler):
def mode_running(self, req):
""" Listen for events, closes socket when returning True """
- self.send_result(req, "update", "test") \ No newline at end of file
+ try:
+ ev = req.queue.get(True, req.interval)
+ self.send(req, ev)
+
+ except Empty:
+ # TODO: server status is not enough
+ # modify core api to include progress? think of other needed information to show
+ # notifications
+
+ self.send(req, self.api.getServerStatus())
+ self.send(req, self.api.getProgressInfo()) \ No newline at end of file