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.

62 lines
1.9 KiB

7 years ago
  1. from clicker_control import clicker_manager
  2. from http import server
  3. from threading import Thread
  4. from urllib.parse import urlparse,parse_qs
  5. import argparse
  6. import json
  7. class handler(server.BaseHTTPRequestHandler):
  8. def do_POST(self):
  9. params = parse_qs(urlparse(self.path).query)
  10. action = params['action'][0]
  11. print(action)
  12. ret = {}
  13. if action == 'on':
  14. self.server.manager.turn_on()
  15. ret['status'] = 'on'
  16. elif action == 'off':
  17. self.server.manager.turn_off()
  18. ret['status'] = 'off'
  19. elif action == 'toggle':
  20. self.server.manager.toggle()
  21. if self.server.manager.on:
  22. ret['status'] = 'on'
  23. else:
  24. ret['status'] = 'off'
  25. elif action == 'kill':
  26. self.server.manager.kill()
  27. self.send_response(204)
  28. self.end_headers()
  29. print('server being killed')
  30. self.server.serve = False
  31. return
  32. else:
  33. self.send_response(400)
  34. self.end_headers()
  35. resp = "Action not recognized".encode()
  36. self.wfile.write(resp)
  37. return
  38. self.send_response(201)
  39. self.end_headers()
  40. resp = json.dumps(ret).encode()
  41. self.wfile.write(resp)
  42. class clicker_server(server.HTTPServer):
  43. def __init__(self,location):
  44. self.manager = clicker_manager()
  45. self.serve = True
  46. super().__init__(location,handler)
  47. def serve_forever(self):
  48. while self.serve:
  49. self.handle_request()
  50. self.socket.close()
  51. def start_server(hostname,port):
  52. httpd = clicker_server((hostname,args.port))
  53. httpd.serve_forever()
  54. if __name__ == "__main__":
  55. parser = argparse.ArgumentParser()
  56. parser.add_argument('-p','--port',type=int,default=5138)
  57. args = parser.parse_args()
  58. start_server('localhost',args.port)