123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import asyncio
- import time
- import websockets
- from pynput import mouse
- from pynput.mouse import Controller
- from contextlib import suppress
- import messageClass
- connected_clients = set()
- async def broadcast(message):
- if connected_clients:
- await asyncio.wait([client.send(message) for client in connected_clients])
- async def register(websocket):
- connected_clients.add(websocket)
- async def unregister(websocket):
- connected_clients.remove(websocket)
- async def server_handler(websocket, path):
- await register(websocket)
- try:
- async for message in websocket:
- await broadcast(message)
- finally:
- await unregister(websocket)
- async def main():
- async with websockets.serve(server_handler, "192.168.0.54", 8765):
- print("websocket server is running...")
- await asyncio.Future()
- mouse_controller = Controller()
- def on_click(x, y, button, pressed):
- if pressed:
- message = messageClass.ClickMessage(x, y, button).getMessage()
- broadcast(message)
- print(time.time())
- def on_scroll(x, y, dx, dy):
- message = messageClass.ScrollMessage(x, y, dx, dy).getMessage()
- broadcast(message)
- print(time.time())
- if __name__ == "__main__":
- listener = mouse.Listener(
- on_click=on_click,
- on_scroll=on_scroll)
- listener.start()
- loop = asyncio.get_event_loop()
- try:
- loop.run_until_complete(main())
- except KeyboardInterrupt:
- print("shutting down websocket server...")
- finally:
- tasks = asyncio.gather(*asyncio.all_tasks(loop), return_exceptions=True)
- tasks.add_done_callback(lambda t: loop.stop())
- tasks.cancel()
- with suppress(asyncio.CancelledError):
- loop.run_forever()
|