From 18cbe913dc4ccde27aa518713d2f4f3376f9dba9 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 23 Sep 2014 20:29:31 -0400 Subject: basic structure of the websockets communication --- termcast_server/web.py | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) (limited to 'termcast_server/web.py') 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() -- cgit v1.2.3-54-g00ecf