main.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import sys
  2. sys.path.append("wrappers")
  3. from modelverse import *
  4. import random, re, json, uuid
  5. from pprint import pprint
  6. from multiprocessing import Process, Pipe, freeze_support
  7. sys.path.append('services/DEVS/pypdevs/src')
  8. sys.path.append('services/DEVS/models')
  9. from simulator import Controller
  10. import threading, time
  11. def pypdevs_service(port):
  12. code = service_get(port)
  13. model_name = str(uuid.uuid4()).replace("-", "")
  14. with open("services/DEVS/models/" + model_name + ".py", 'w') as f:
  15. f.write(code)
  16. Root = getattr(__import__(model_name), "Root")
  17. controller = Controller(Root())
  18. def inputter():
  19. print("Waiting for input...")
  20. while 1:
  21. try:
  22. input = service_get(port)
  23. print('raw input = %s' % input)
  24. params = json.loads(input)
  25. print('json parsed = %s' % params)
  26. if not isinstance(params, list):
  27. params = [params]
  28. print("Sending input to simulator: %s" % params)
  29. if (len(params) > 1):
  30. controller.addInput(Event(params[0], "request", params[1:]))
  31. else:
  32. controller.addInput(Event(params[0], "request", []))
  33. except:
  34. import traceback
  35. traceback.print_exc()
  36. input_thread = threading.Thread(target=inputter)
  37. input_thread.daemon = True
  38. input_thread.start()
  39. output_listener = controller.addOutputListener(["reply"])
  40. def outputter():
  41. print("Waiting for output...")
  42. while 1:
  43. output_val = output_listener.fetch(-1)
  44. print("Got output from simulator: %s" % output_val)
  45. service_set(port, json.dumps({"name": output_val.getName(), "port": output_val.getPort(), "params": output_val.getParameters()}))
  46. output_thread = threading.Thread(target=outputter)
  47. output_thread.daemon = True
  48. output_thread.start()
  49. controller.start()
  50. try:
  51. init(sys.argv[1])
  52. login("pypdevs_service", "my_password")
  53. service_register("pypdevs_simulator", pypdevs_service)
  54. try:
  55. while True:
  56. # Stay active, as we shouldn't exit while the service is running!
  57. time.sleep(1)
  58. finally:
  59. service_stop()
  60. except KeyboardInterrupt:
  61. pass