Skip to content

Commit

Permalink
Skeleton of socket support
Browse files Browse the repository at this point in the history
  • Loading branch information
Joel Collins committed Mar 10, 2020
1 parent 011e129 commit 028e21c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
16 changes: 15 additions & 1 deletion labthings/server/labthing.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from .spec.utilities import get_spec
from .spec.td import ThingDescription
from .decorators import tag
from .sockets import Sockets

from .views.extensions import ExtensionList
from .views.tasks import TaskList, TaskView
Expand All @@ -29,7 +30,8 @@ def __init__(
description: str = "",
version: str = "0.0.0",
):
self.app = app
self.app = app # Becomes a Flask app
self.sockets = None # Becomes a Socket(app) websocket handler

self.components = {}

Expand Down Expand Up @@ -103,6 +105,10 @@ def init_app(self, app):
# Create base routes
self._create_base_routes()

# Create socket handler
self.sockets = Sockets(app)
self._create_base_sockets()

def teardown(self, exception):
pass

Expand All @@ -123,6 +129,14 @@ def _create_base_routes(self):
self.add_root_link(TaskList, "tasks")
self.add_view(TaskView, "/tasks/<task_id>", endpoint=TASK_ENDPOINT)

def _create_base_sockets(self):
self.sockets.add_url_rule("/", self._socket_handler)

def _socket_handler(self, ws):
while not ws.closed:
message = ws.receive()
ws.send("Web sockets not yet implemented")

# Device stuff

def add_component(self, device_object, device_name: str):
Expand Down
10 changes: 5 additions & 5 deletions labthings/server/sockets.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,15 @@ def init_app(self, app):
app.wsgi_app = SocketMiddleware(app.wsgi_app, app, self)

def route(self, rule, **options):
def decorator(f):
def decorator(view_func):
endpoint = options.pop("endpoint", None)
self.add_url_rule(rule, endpoint, f, **options)
return f
self.add_url_rule(rule, view_func, **options)
return view_func

return decorator

def add_url_rule(self, rule, _, f, **options):
self.url_map.add(Rule(rule, endpoint=f))
def add_url_rule(self, rule, view_func, **options):
self.url_map.add(Rule(rule, endpoint=view_func))

def register_blueprint(self, blueprint, **options):
"""
Expand Down

0 comments on commit 028e21c

Please sign in to comment.