aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-09-23 18:39:29 -0400
committerJesse Luehrs <doy@tozt.net>2014-09-23 18:39:29 -0400
commit1525c33ba5fceeb5558b98c9f6e197d28aaa8770 (patch)
tree8929ab7f0e7782c4a15ec43da59fda224fd227c1
parenta9197023946c36a406405338adb36102c179a3da (diff)
downloadpython-termcast-server-1525c33ba5fceeb5558b98c9f6e197d28aaa8770.tar.gz
python-termcast-server-1525c33ba5fceeb5558b98c9f6e197d28aaa8770.zip
stub out websockets code for the web viewer
-rw-r--r--README.md1
-rw-r--r--setup.py4
-rw-r--r--termcast_server/__init__.py10
-rw-r--r--termcast_server/index.html21
-rw-r--r--termcast_server/web.py34
5 files changed, 70 insertions, 0 deletions
diff --git a/README.md b/README.md
index efc9b93..c95ea65 100644
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/setup.py b/setup.py
index 3f59bfc..09b8b0b 100644
--- a/setup.py
+++ b/setup.py
@@ -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()