websocket.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import asyncio
  2. import websockets
  3. import threading
  4. import json
  5. class Websocket(threading.Thread):
  6. def __init__(self, add_question, handle_diapo, handle_rec, toggle, handle_video):
  7. super(Websocket, self).__init__()
  8. self.start_server = websockets.serve(self.handle_input, '127.0.0.1', 5678)
  9. self.callbacks={
  10. "add_preg": add_question,
  11. "diapo": add_question,
  12. "startrec":handle_rec,
  13. "startrectrat":handle_rec,
  14. "stoprec":handle_rec,
  15. "toggle":toggle,
  16. "video":handle_video
  17. }
  18. print(type(self.callbacks))
  19. self.valid_data_types=["add_preg", "diapo", "startrec","startrectrat","stoprec","toggle","video"]
  20. #asyncio.get_event_loop().run_until_complete(start_server)
  21. #asyncio.get_event_loop().run_forever()
  22. self.loop = asyncio.get_event_loop()
  23. def run(self):
  24. asyncio.set_event_loop(self.loop)
  25. self.loop.run_until_complete(self.start_server)
  26. self.loop.run_forever()
  27. print("finitO?")
  28. @asyncio.coroutine
  29. def handle_input(self,websocket, path):
  30. while True:
  31. try:
  32. #data = await websocket.recv()
  33. data = yield from websocket.recv()
  34. try:
  35. data=json.loads(data)
  36. except Exception as e:
  37. print(e)
  38. print(data)
  39. print("No pude hacer loads")
  40. continue
  41. print(data)
  42. if not "type" in data:
  43. print("data!= type?")
  44. continue
  45. #add preg, diapo, start|stop rec, switch mode, add video
  46. if data["type"] in self.valid_data_types:
  47. print("{}".format(data))
  48. self.callbacks[data["type"]]()
  49. except websockets.exceptions.ConnectionClosed as c:
  50. print( "client dc'd")
  51. break