visualization_server.html 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <div>
  2. <script src="javascript_models/javascript_runtime/statecharts_core.js"></script>
  3. <script src="javascript_models/javascript_runtime/libs/utils.js"></script>
  4. <script src="javascript_models/javascript_runtime/libs/svg.js"></script>
  5. <script src="javascript_models/javascript_runtime/libs/ui.js"></script>
  6. <script src="javascript_models/particle_interaction_vis_js.js"></script>
  7. <script src="/socket.io/socket.io.js"></script>
  8. <script>
  9. var controller = new ParticleInteraction.Controller([800,600]);
  10. var ui_reply_port = controller.addOutputListener('output');
  11. var socket = io();
  12. /*
  13. Check whether the user interacted with the visualization UI. If so, forward to communication layer.
  14. */
  15. setInterval(function() {
  16. while (true) {
  17. reply_msg = ui_reply_port.fetch(0)
  18. if (reply_msg == undefined) {
  19. break
  20. }
  21. event_name = reply_msg.name
  22. parameters = reply_msg.parameters
  23. if (event_name == "particle_clicked") {
  24. socket.emit('message', "INTERRUPT " + parameters[0]);
  25. } else if (event_name == "delete_selected") {
  26. socket.emit('message', "INTERRUPT delete_selected");
  27. } else if (event_name == "particle_right_clicked") {
  28. socket.emit('message', JSON.stringify({'name': "select_instance", "parameters": parameters}));
  29. }
  30. }
  31. }, 5)
  32. /*
  33. When we receive a message from the communication layer (either from the simulator itself or the debugging interface),
  34. translate it to the correct event for the visualization Statechart.
  35. */
  36. socket.on('msg', function(msg){
  37. var event = undefined;
  38. if (msg.substring(0, 4) == "dbg_") {
  39. // message from the debugging interface
  40. msg = JSON.parse(msg.substring(4));
  41. cmd = msg["parameters"][0];
  42. if (cmd == "reset") {
  43. event = new Event("reset", "input", []);
  44. }
  45. } else {
  46. // message from the simulator (i.e., an output message of the simulation)
  47. msg = JSON.parse(msg);
  48. var msg_contents = msg[1];
  49. if (msg[0] == "POS_OUT") {
  50. if (msg_contents[0] == "delete") {
  51. event = new Event("delete_particle", "input", [msg_contents[1]]);
  52. } else if (msg_contents[0] == "created") {
  53. event = new Event("create_particle", "input", [msg_contents.slice(1)]);
  54. } else {
  55. event = new Event("move_particle", "input", [msg_contents]);
  56. }
  57. } else if (msg[0] == "TIME_OUT") {
  58. event = new Event("update_time", "input", [msg_contents])
  59. } else if (msg[0] == "COLOR_OUT") {
  60. event = new Event("color_particle", "input", [msg_contents])
  61. }
  62. }
  63. if (event != undefined) {
  64. controller.addInput(event, 0.0);
  65. }
  66. });
  67. controller.start();
  68. </script>
  69. <div>