import asyncio import websockets import sys port=sys.argv[1] if len(sys.argv)>1 else 6112 users=[] board=[] # This is actually a list of actions taken to create the board # It just gets bigger and bigger over time. That's probably bad. # I think I might add a thing for emptying it. async def push(sock,type,data): await sock.send(f'{type}+{data}') async def announce(type,data): if users: await asyncio.wait([push(user[0],type,data) for user in users]) def sync(): return 'board:'+','.join(board)+';users:'+','.join([user[1] for user in users]) async def getconnection(websocket, path): name=await websocket.recv() print(name,type(name)) await push(websocket,'sync',sync()) await announce('join',name) users.append((websocket,name)) async for message in websocket: if message[0:4]=='acti': board.append(message[5:]) await announce(message[0:4],message[5:]) if message[0:4]=='sync': await push(websocket,'sync',sync()) if message[0:4]=='rese': board.clear() users.remove((websocket,name)) await announce('part',name) asyncio.get_event_loop().run_until_complete(websockets.serve(getconnection,'0.0.0.0',port)) asyncio.get_event_loop().run_forever()