main.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. from simulator import Controller
  9. import threading, time
  10. init(sys.argv[1])
  11. login("pypdevs_service", "my_password")
  12. def pypdevs_service(port):
  13. exec service_get(port) in globals()
  14. controller = Controller(Root())
  15. def inputter():
  16. print "Waiting for input..."
  17. while 1:
  18. input = service_get(port)
  19. print 'raw input = %s' % input
  20. params = json.loads(input)
  21. print 'json parsed = %s' % params
  22. if not isinstance(params, list):
  23. params = [params]
  24. print "Sending input to simulator: %s" % params
  25. if (len(params) > 1):
  26. controller.addInput(Event(params[0], "request", params[1:]))
  27. else:
  28. controller.addInput(Event(params[0], "request", []))
  29. input_thread = threading.Thread(target=inputter)
  30. input_thread.daemon = True
  31. input_thread.start()
  32. output_listener = controller.addOutputListener(["reply"])
  33. def outputter():
  34. print "Waiting for output..."
  35. while 1:
  36. output_val = output_listener.fetch(-1)
  37. print "Got output from simulator: %s" % output_val
  38. service_set(port, json.dumps({"name": output_val.getName(), "port": output_val.getPort(), "params": output_val.getParameters()}))
  39. output_thread = threading.Thread(target=outputter)
  40. output_thread.daemon = True
  41. output_thread.start()
  42. controller.start()
  43. service_register("pypdevs_simulator", pypdevs_service)
  44. try:
  45. while True:
  46. # Stay active, as we shouldn't exit while the service is running!
  47. time.sleep(1)
  48. finally:
  49. service_stop()