websocketSend.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import asyncio
  2. import time
  3. import websockets
  4. from pynput import mouse
  5. from pynput.mouse import Controller
  6. from contextlib import suppress
  7. import messageClass
  8. connected_clients = set()
  9. async def broadcast(message):
  10. if connected_clients:
  11. await asyncio.wait([client.send(message) for client in connected_clients])
  12. async def register(websocket):
  13. connected_clients.add(websocket)
  14. async def unregister(websocket):
  15. connected_clients.remove(websocket)
  16. async def server_handler(websocket, path):
  17. await register(websocket)
  18. try:
  19. async for message in websocket:
  20. await broadcast(message)
  21. finally:
  22. await unregister(websocket)
  23. async def main():
  24. async with websockets.serve(server_handler, "192.168.0.54", 8765):
  25. print("websocket server is running...")
  26. await asyncio.Future()
  27. mouse_controller = Controller()
  28. def on_click(x, y, button, pressed):
  29. if pressed:
  30. message = messageClass.ClickMessage(x, y, button).getMessage()
  31. broadcast(message)
  32. print(time.time())
  33. def on_scroll(x, y, dx, dy):
  34. message = messageClass.ScrollMessage(x, y, dx, dy).getMessage()
  35. broadcast(message)
  36. print(time.time())
  37. if __name__ == "__main__":
  38. listener = mouse.Listener(
  39. on_click=on_click,
  40. on_scroll=on_scroll)
  41. listener.start()
  42. loop = asyncio.get_event_loop()
  43. try:
  44. loop.run_until_complete(main())
  45. except KeyboardInterrupt:
  46. print("shutting down websocket server...")
  47. finally:
  48. tasks = asyncio.gather(*asyncio.all_tasks(loop), return_exceptions=True)
  49. tasks.add_done_callback(lambda t: loop.stop())
  50. tasks.cancel()
  51. with suppress(asyncio.CancelledError):
  52. loop.run_forever()