diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-09-23 18:39:29 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-09-23 18:39:29 -0400 |
commit | 1525c33ba5fceeb5558b98c9f6e197d28aaa8770 (patch) | |
tree | 8929ab7f0e7782c4a15ec43da59fda224fd227c1 | |
parent | a9197023946c36a406405338adb36102c179a3da (diff) | |
download | python-termcast-server-1525c33ba5fceeb5558b98c9f6e197d28aaa8770.tar.gz python-termcast-server-1525c33ba5fceeb5558b98c9f6e197d28aaa8770.zip |
stub out websockets code for the web viewer
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | setup.py | 4 | ||||
-rw-r--r-- | termcast_server/__init__.py | 10 | ||||
-rw-r--r-- | termcast_server/index.html | 21 | ||||
-rw-r--r-- | termcast_server/web.py | 34 |
5 files changed, 70 insertions, 0 deletions
@@ -6,6 +6,7 @@ goal of adding features like a web viewer and better authentication options. # Dependencies * [paramiko](https://pypi.python.org/pypi/paramiko/) +* [tornado](https://pypi.python.org/pypi/tornado) * [vt100](https://pypi.python.org/pypi/vt100) # Client @@ -11,7 +11,11 @@ setup( install_requires=[ "vt100", "paramiko", + "tornado", ], + package_data={ + '': ["*.html"], + }, classifiers=[ "Development Status :: 3 - Alpha", "Environment :: Console", diff --git a/termcast_server/__init__.py b/termcast_server/__init__.py index 6896b04..98cf7d9 100644 --- a/termcast_server/__init__.py +++ b/termcast_server/__init__.py @@ -7,6 +7,7 @@ import uuid from . import pubsub from . import ssh from . import termcast +from . import web class Server(object): def __init__(self, keyfile): @@ -16,6 +17,7 @@ class Server(object): def listen(self): ssh_sock = self._open_socket(2200) termcast_sock = self._open_socket(2201) + web_sock = self._open_socket(2202) threading.Thread( target=lambda: self.wait_for_ssh_connection(ssh_sock) @@ -23,6 +25,9 @@ class Server(object): threading.Thread( target=lambda: self.wait_for_termcast_connection(termcast_sock) ).start() + threading.Thread( + target=lambda: self.wait_for_web_connection(web_sock) + ).start() def wait_for_ssh_connection(self, sock): self._wait_for_connection( @@ -36,6 +41,11 @@ class Server(object): lambda client: self.handle_termcast_connection(client) ) + def wait_for_web_connection(self, sock): + sock.setblocking(0) + sock.listen(100) + web.start_server(sock) + def handle_ssh_connection(self, client): self._handle_connection( client, diff --git a/termcast_server/index.html b/termcast_server/index.html new file mode 100644 index 0000000..e7cd8dd --- /dev/null +++ b/termcast_server/index.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> + <script> +var url = location.origin.replace(/^http/, 'ws') + "/-/"; +var socket = new WebSocket(url); +socket.onopen = function (e) { + // XXX +}; +socket.onmessage = function (e) { + // XXX +}; +socket.onclose = function (e) { + // XXX +}; + </script> +</head> +<body> + <h1>Hello World</h1> +</body> +</html> diff --git a/termcast_server/web.py b/termcast_server/web.py new file mode 100644 index 0000000..6b45632 --- /dev/null +++ b/termcast_server/web.py @@ -0,0 +1,34 @@ +from pkg_resources import resource_string +import tornado +import tornado.httpserver +import tornado.ioloop +import tornado.web +import tornado.websocket + +class RootHandler(tornado.web.RequestHandler): + def get(self): + self.write(resource_string(__name__, "index.html")) + +class WebSocketHandler(tornado.websocket.WebSocketHandler): + def open(self): + # XXX + pass + + def on_message(self, message): + # XXX + pass + + def close(self): + # XXX + pass + +def make_app(): + return tornado.web.Application([ + ('/', RootHandler), + ('/-/', WebSocketHandler), + ]) + +def start_server(sock): + server = tornado.httpserver.HTTPServer(make_app()) + server.add_socket(sock) + tornado.ioloop.IOLoop.instance().start() |