forked from mirrors/gecko-dev
Update `aiohttp` to version 3.8.5 and `requests` to version 2.31.0, and vendor their respective dependencies. Add all the new dependencies to the various required site virtualenv requirements files. Differential Revision: https://phabricator.services.mozilla.com/D188904
57 lines
1.4 KiB
Python
Executable file
57 lines
1.4 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
"""Example for aiohttp.web websocket server."""
|
|
|
|
import os
|
|
|
|
from aiohttp import web
|
|
|
|
WS_FILE = os.path.join(os.path.dirname(__file__), "websocket.html")
|
|
|
|
|
|
async def wshandler(request):
|
|
resp = web.WebSocketResponse()
|
|
available = resp.can_prepare(request)
|
|
if not available:
|
|
with open(WS_FILE, "rb") as fp:
|
|
return web.Response(body=fp.read(), content_type="text/html")
|
|
|
|
await resp.prepare(request)
|
|
|
|
await resp.send_str("Welcome!!!")
|
|
|
|
try:
|
|
print("Someone joined.")
|
|
for ws in request.app["sockets"]:
|
|
await ws.send_str("Someone joined")
|
|
request.app["sockets"].append(resp)
|
|
|
|
async for msg in resp:
|
|
if msg.type == web.WSMsgType.TEXT:
|
|
for ws in request.app["sockets"]:
|
|
if ws is not resp:
|
|
await ws.send_str(msg.data)
|
|
else:
|
|
return resp
|
|
return resp
|
|
|
|
finally:
|
|
request.app["sockets"].remove(resp)
|
|
print("Someone disconnected.")
|
|
for ws in request.app["sockets"]:
|
|
await ws.send_str("Someone disconnected.")
|
|
|
|
|
|
async def on_shutdown(app):
|
|
for ws in app["sockets"]:
|
|
await ws.close()
|
|
|
|
|
|
def init():
|
|
app = web.Application()
|
|
app["sockets"] = []
|
|
app.router.add_get("/", wshandler)
|
|
app.on_shutdown.append(on_shutdown)
|
|
return app
|
|
|
|
|
|
web.run_app(init())
|