2
"""websocket cmd client for web_ws.py example."""
7
from contextlib import suppress
12
async def start_client(url: str) -> None:
13
name = input("Please enter your name: ")
15
async def dispatch(ws: aiohttp.ClientWebSocketResponse) -> None:
17
msg = await ws.receive()
19
if msg.type == aiohttp.WSMsgType.TEXT:
20
print("Text: ", msg.data.strip())
21
elif msg.type == aiohttp.WSMsgType.BINARY:
22
print("Binary: ", msg.data)
23
elif msg.type == aiohttp.WSMsgType.PING:
25
elif msg.type == aiohttp.WSMsgType.PONG:
26
print("Pong received")
28
if msg.type == aiohttp.WSMsgType.CLOSE:
30
elif msg.type == aiohttp.WSMsgType.ERROR:
31
print("Error during receive %s" % ws.exception())
32
elif msg.type == aiohttp.WSMsgType.CLOSED:
37
async with aiohttp.ClientSession() as session:
38
async with session.ws_connect(url, autoclose=False, autoping=False) as ws:
40
dispatch_task = asyncio.create_task(dispatch(ws))
43
while line := await asyncio.to_thread(sys.stdin.readline):
44
await ws.send_str(name + ": " + line)
46
dispatch_task.cancel()
47
with suppress(asyncio.CancelledError):
51
ARGS = argparse.ArgumentParser(
52
description="websocket console client for wssrv.py example."
55
"--host", action="store", dest="host", default="127.0.0.1", help="Host name"
58
"--port", action="store", dest="port", default=8080, type=int, help="Port number"
61
if __name__ == "__main__":
62
args = ARGS.parse_args()
64
args.host, port = args.host.split(":", 1)
67
url = f"http://{args.host}:{args.port}"
69
asyncio.run(start_client(url))