forked from mirrors/gecko-dev
Note that, as part of adding this packages to the automated vendoring system, some dependencies were automatically added - most notably, dependencies of `taskcluster` that become visible with Python 3.6+. Also, adds `**/.git` to the exclusions because: * `.git` is part of our `.hgignore`, but * `.git` is part of the `aiohttp` `tar.gz` file. Since the file isn't needed for `pip install`-ing `aiohttp`, and since we want `./mach vendor python` to be a no-op when there's no requirement changes, we exclude it. Differential Revision: https://phabricator.services.mozilla.com/D123122
58 lines
1.4 KiB
Python
Executable file
58 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())
|