Revamped Subscribe, Peers route fixes, enabled piping

Subscribe was pretty damn ugly code. I wonder why I didn't notice earlier.
This commit is contained in:
Philip Trauner 2016-12-02 23:26:58 +01:00
parent 6ae115a206
commit 4319c2d194

View file

@ -15,7 +15,7 @@ from wsgiref.simple_server import make_server
from ws4py.server.wsgirefserver import WSGIServer, WebSocketWSGIRequestHandler from ws4py.server.wsgirefserver import WSGIServer, WebSocketWSGIRequestHandler
from ws4py.server.wsgiutils import WebSocketWSGIApplication from ws4py.server.wsgiutils import WebSocketWSGIApplication
from Highway import Server, Route from Highway import Server, Route, DummyPipe
class Info(Route): class Info(Route):
@ -86,22 +86,19 @@ class Subscribe(Route):
CHANNELS = [EDITOR, WALLABY, WEB] CHANNELS = [EDITOR, WALLABY, WEB]
def run(self, data, handler): def run(self, data, handler):
if "type" in data: if type(data) is dict:
if data["type"] == Subscribe.EDITOR: if "channel" in data:
handler.channel = Subscribe.EDITOR if data["channel"] in Subscribe.CHANNELS:
handler.broadcast.add(handler, handler.channel) handler.channel = data["channel"]
elif data["type"] == Subscribe.WALLABY:
handler.channel = Subscribe.Channels.WALLABY
handler.broadcast.add(handler, handler.channel)
elif data["type"] == Subscribe.WEB:
handler.channel = Subscribe.Channels.WEB
handler.broadcast.add(handler, handler.channel) handler.broadcast.add(handler, handler.channel)
if handler.debug: if handler.debug:
Logging.info("'%s:%d' has identified as a %s client." % (handler.info[0], handler.info[1], Logging.info("'%s:%i' has identified as a %s client." % (handler.address, handler.port,
"Editor" if handler.channel == Subscribe.EDITOR else "Editor" if handler.channel == Subscribe.EDITOR else
"Wallaby" if handler.channel == Subscribe.WALLABY else "Controller" if handler.channel == Subscribe.WALLABY else
"Web" if handler.channel == Subscribe.WEB else "Web" if handler.channel == Subscribe.WEB else
"Unknown (will not subscribe to broadcast)")) "Unknown (will not subscribe to broadcast)"))
if "name" in data:
handler.name = data["name"]
class Peers(Route): class Peers(Route):
@ -109,22 +106,25 @@ class Peers(Route):
out = {} out = {}
check_type = False check_type = False
if type(data) is dict: if type(data) is dict:
if "type" in data: if "channel" in data:
check_type = True check_type = True
# We can use the in keyword this way
if type(data["channel"]) is int:
data["channel"] = (data["channel"], )
peers = handler.peers peers = handler.peers
for peer_id in peers: for peer_id in peers:
if not check_type or peers[peer_id].channel in data["type"]: if not check_type or peers[peer_id].channel in data["channel"]:
peer = peers[peer_id] peer = peers[peer_id]
if peer is not handler: if peer is not handler:
out[peer_id] = {"name" : peer.name, out[peer_id] = {"name" : peer.name,
"address" : peer.address, "port" : peer.port, "address" : peer.address, "port" : peer.port,
"type" : peer.channel} "channel" : peer.channel}
handler.send(out, handler.reverse_routes[self]) handler.send(out, handler.reverse_routes[self])
class Handler(Server): class Handler(Server):
def setup(self, routes, broadcast, websockets, debug=False): def setup(self, routes, broadcast, websockets, debug=False):
super().setup(routes, websockets, debug=debug) super().setup(routes, websockets, piping=True, debug=debug)
self.broadcast = broadcast self.broadcast = broadcast
self.channel = None self.channel = None
self.name = "Unknown" self.name = "Unknown"
@ -183,7 +183,7 @@ server.set_app(WebSocketWSGIApplication(handler_cls=Handler,
"websockets" : server.manager.websockets, "websockets" : server.manager.websockets,
"routes" : {"info" : Info(), "routes" : {"info" : Info(),
"subscribe" : Subscribe(), "subscribe" : Subscribe(),
"std_stream" : StdStream(), "hostname" : DummyPipe(),
"peers" : Peers()}})) "peers" : Peers()}}))