From 4d6dcf7d84ef3e6040e3427e69173b61581bea9f Mon Sep 17 00:00:00 2001 From: Philip Trauner Date: Thu, 1 Dec 2016 22:52:57 +0100 Subject: [PATCH] Migrated to new init logic, implemented Peers route Highway requires new init logic to be able to access all currently connected peers. After a little bit of reverse engineering deemed this to be the least hacky way to obtain access. Initial version of Peers. This route can be used to retrieve client ids, which are required for piping. --- Server/Server.py | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/Server/Server.py b/Server/Server.py index ac3f69c..a13004d 100644 --- a/Server/Server.py +++ b/Server/Server.py @@ -104,13 +104,31 @@ class Subscribe(Route): "Unknown (will not subscribe to broadcast)")) +class Peers(Route): + def run(self, data, handler): + out = {} + check_type = False + if type(data) is dict: + if "type" in data: + check_type = True + peers = handler.peers + for peer_id in peers: + if not check_type or peers[peer_id].channel in data["type"]: + peer = peers[peer_id] + if peer is not handler: + out[peer_id] = {"name" : peer.name, + "address" : peer.address, "port" : peer.port, + "type" : peer.channel} + handler.send(out, handler.reverse_routes[self]) + + class Handler(Server): - def setup(self, routes, broadcast, debug=False): - super().setup(routes, debug=debug) + def setup(self, routes, broadcast, websockets, debug=False): + super().setup(routes, websockets, debug=debug) self.broadcast = broadcast self.channel = None self.name = "Unknown" - + def ready(self): Logging.info("Handler for '%s:%d' ready." % (self.address, self.port)) @@ -148,7 +166,7 @@ except FileNotFoundError: broadcast = Broadcast() -# Populating broadcast channels with all channels defined in Handler.Channels +# Populating broadcast channels with all channels defined in Subscribe.Channels for channel in Subscribe.CHANNELS: broadcast.add_channel(channel) @@ -156,13 +174,18 @@ compile = Compile(config.source_path, config.binary_path) server = make_server(config.server_address[0], config.server_address[1], - server_class=WSGIServer, handler_class=WebSocketWSGIRequestHandler, - app=WebSocketWSGIApplication(handler_cls=Handler, + server_class=WSGIServer, handler_class=WebSocketWSGIRequestHandler, + app=None) +server.initialize_websockets_manager() + +server.set_app(WebSocketWSGIApplication(handler_cls=Handler, handler_args={"debug" : config.debug, "broadcast" : broadcast, + "websockets" : server.manager.websockets, "routes" : {"info" : Info(), "subscribe" : Subscribe(), - "std_stream" : StdStream()}})) -server.initialize_websockets_manager() + "std_stream" : StdStream(), + "peers" : Peers()}})) + try: server.serve_forever()