Anders and Briegel in Python
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.5KB

  1. """
  2. Allows us to visualize the state in a browser
  3. """
  4. import atexit
  5. import threading
  6. import time
  7. from websocket import create_connection
  8. from graphstate import GraphState
  9. import json
  10. class VisibleGraphState(GraphState):
  11. def __init__(self, *args, **kwargs):
  12. GraphState.__init__(self, *args, **kwargs)
  13. self.ws = create_connection("ws://localhost:5001")
  14. self.diff = []
  15. atexit.register(self.shutdown)
  16. self.ws.send(json.dumps({"method":"clear"}))
  17. def shutdown(self):
  18. if len(self.diff)>0:
  19. self.update()
  20. self.ws.close()
  21. def send(self, method, *args, **kwargs):
  22. kwargs.update({"method": method})
  23. self.diff.append(kwargs)
  24. def add_node(self, node, meta = {}):
  25. GraphState.add_node(self, node, meta)
  26. self.send("add_node", node=node, meta=meta)
  27. def add_edge(self, start, end):
  28. GraphState.add_edge(self, start, end)
  29. self.send("add_edge", start=start, end=end)
  30. def del_edge(self, start, end):
  31. GraphState.del_edge(self, start, end)
  32. self.send("del_edge", start=start, end=end)
  33. def act_local_rotation(self, node, operation):
  34. GraphState.act_local_rotation(self, node, operation)
  35. self.send("update_vop", node = node, vop = self.vops[node])
  36. def update(self):
  37. #data = json.dumps({"diff": self.diff, "state":self.to_json()})
  38. data = json.dumps({"diff": self.diff})
  39. self.ws.send(data)
  40. self.diff = []