import asyncio
from soyokaze import Client, CloseCode, Error, Message, Opcode, Port, Server
async def echo(socket):
try:
while True:
opcode, payload = await socket.receive_message()
await socket.send_message(opcode, payload)
except Error:
pass
async def decline(request):
response = Message.response(426, request.version)
response.set_body("this port speaks WebSocket")
return response
async def main():
server = Server()
handle = await server.serve(decline, [Port.TCP(0)], on_websocket=echo)
client = Client()
socket = await client.websocket(f"ws://127.0.0.1:{handle.port}/echo")
for message in ["hello", "soyokaze"]:
await socket.send_message(Opcode.TEXT, message)
opcode, payload = await socket.receive_message()
print(f"{opcode.name} {payload.decode()}")
await socket.close(CloseCode.NORMAL, "")
await handle.close(5)
if __name__ == "__main__":
asyncio.run(main())