""" Allows us to visualize the state in a browser """ import atexit import threading import time from websocket import create_connection from graphstate import GraphState import json class VisibleGraphState(GraphState): def __init__(self, *args, **kwargs): GraphState.__init__(self, *args, **kwargs) self.ws = create_connection("ws://localhost:5001") self.diff = [] atexit.register(self.shutdown) self.ws.send(json.dumps({"method":"clear"})) def shutdown(self): if len(self.diff)>0: self.update() self.ws.close() def send(self, method, *args, **kwargs): kwargs.update({"method": method}) self.diff.append(kwargs) def add_node(self, node, meta = {}): GraphState.add_node(self, node, meta) self.send("add_node", node=node, meta=meta) def add_edge(self, start, end): GraphState.add_edge(self, start, end) self.send("add_edge", start=start, end=end) def del_edge(self, start, end): GraphState.del_edge(self, start, end) self.send("del_edge", start=start, end=end) def act_local_rotation(self, node, operation): GraphState.act_local_rotation(self, node, operation) self.send("update_vop", node = node, vop = self.vops[node]) def update(self): #data = json.dumps({"diff": self.diff, "state":self.to_json()}) data = json.dumps({"diff": self.diff}) self.ws.send(data) self.diff = []