aboutsummaryrefslogtreecommitdiffstats
path: root/termcast_server/web.py
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-09-23 20:29:31 -0400
committerJesse Luehrs <doy@tozt.net>2014-09-23 20:29:31 -0400
commit18cbe913dc4ccde27aa518713d2f4f3376f9dba9 (patch)
tree2fb1be8e4e8c76fe8644eb1f01f9c682f09ea7c1 /termcast_server/web.py
parent1525c33ba5fceeb5558b98c9f6e197d28aaa8770 (diff)
downloadpython-termcast-server-18cbe913dc4ccde27aa518713d2f4f3376f9dba9.tar.gz
python-termcast-server-18cbe913dc4ccde27aa518713d2f4f3376f9dba9.zip
basic structure of the websockets communication
Diffstat (limited to 'termcast_server/web.py')
-rw-r--r--termcast_server/web.py41
1 files changed, 29 insertions, 12 deletions
diff --git a/termcast_server/web.py b/termcast_server/web.py
index 6b45632..2baca26 100644
--- a/termcast_server/web.py
+++ b/termcast_server/web.py
@@ -1,4 +1,5 @@
from pkg_resources import resource_string
+import json
import tornado
import tornado.httpserver
import tornado.ioloop
@@ -10,25 +11,41 @@ class RootHandler(tornado.web.RequestHandler):
self.write(resource_string(__name__, "index.html"))
class WebSocketHandler(tornado.websocket.WebSocketHandler):
- def open(self):
- # XXX
- pass
+ def initialize(self, publisher):
+ self.publisher = publisher
+ self.watching_id = None
+ self.initialized = False
+ self.publisher.subscribe(self)
def on_message(self, message):
- # XXX
- pass
+ print(message)
+ data = json.loads(message)
+ if data["type"] == "request_streamer_list":
+ streamers = self.publisher.request_all("get_streamers")
+ reply = {
+ "type": "streamer_list",
+ "streamers": [ { "id": s["id"], "name": s["name"].decode('utf-8', 'replace') } for s in streamers ],
+ }
+ self.write_message(json.dumps(reply))
+ elif data["type"] == "start_watching":
+ self.watching_id = data["who"]
+ self.publisher.notify("new_viewer", self.watching_id)
- def close(self):
- # XXX
- pass
+ def on_finish(self):
+ self.publisher.unsubscribe(self)
-def make_app():
+ def msg_new_data(self, connection_id, prev_buf, data):
+ if self.watching_id != connection_id:
+ return
+ self.write_message(json.dumps({"type": "update_screen"}))
+
+def make_app(publisher):
return tornado.web.Application([
('/', RootHandler),
- ('/-/', WebSocketHandler),
+ ('/-/', WebSocketHandler, dict(publisher=publisher)),
])
-def start_server(sock):
- server = tornado.httpserver.HTTPServer(make_app())
+def start_server(sock, publisher):
+ server = tornado.httpserver.HTTPServer(make_app(publisher))
server.add_socket(sock)
tornado.ioloop.IOLoop.instance().start()