def open(self): """Discover nodes on each opened connection.""" self.set_nodelay(True) logger.debug("New node websocket opened") self.application.nodes.update( {self: { 'uid': str(uuid.uuid4()), 'data': { 'protocol': PROTOCOL } }}) node_uid = self.application.nodes[self]['uid'] self.application.send_to_broker(Message.new_node(node_uid)) yield self.write_message(Message.discover_node()) self.application.send_to_broker( Message.update_node(node_uid, 'protocol', PROTOCOL))
def main(args): """Main function.""" try: ws = websocket.create_connection("ws://{}:{}/node".format( args.host, args.port)) except ConnectionRefusedError: print("Cannot connect to ws://{}:{}".format(args.host, args.port)) return init_node(ws) while True: try: msg = ws.recv() except: print("Connection closed") break else: print(msg) if msg == Message.discover_node(): init_node(ws) else: msg = json.loads(msg) if msg['payload'] == '1': ws.send( json.dumps({ 'type': 'update', 'data': { 'led': '1' } })) else: ws.send( json.dumps({ 'type': 'update', 'data': { 'led': '0' } }))
async def discover_node(self, node): for ws, uid in self.node_mapping.items(): if node.uid == uid: await ws.write_message(Message.discover_node()) break
def test_discover_node(): serialized = Message.discover_node() assert serialized == Message.serialize({'request': 'discover'})