xref: /unit/test/python/websockets/subprotocol/asgi.py (revision 1848:4bd548074e2c)
11625Smax.romanov@nginx.comasync def application(scope, receive, send):
21625Smax.romanov@nginx.com    assert scope['type'] == 'websocket'
31625Smax.romanov@nginx.com
41625Smax.romanov@nginx.com    while True:
51625Smax.romanov@nginx.com        m = await receive()
61625Smax.romanov@nginx.com        if m['type'] == 'websocket.connect':
71625Smax.romanov@nginx.com            subprotocols = scope['subprotocols']
81625Smax.romanov@nginx.com
9*1848Szelenkov@nginx.com            await send(
10*1848Szelenkov@nginx.com                {
11*1848Szelenkov@nginx.com                    'type': 'websocket.accept',
12*1848Szelenkov@nginx.com                    'headers': [
13*1848Szelenkov@nginx.com                        (b'x-subprotocols', str(subprotocols).encode()),
14*1848Szelenkov@nginx.com                    ],
15*1848Szelenkov@nginx.com                    'subprotocol': subprotocols[0],
16*1848Szelenkov@nginx.com                }
17*1848Szelenkov@nginx.com            )
181625Smax.romanov@nginx.com
191625Smax.romanov@nginx.com        if m['type'] == 'websocket.receive':
20*1848Szelenkov@nginx.com            await send(
21*1848Szelenkov@nginx.com                {
22*1848Szelenkov@nginx.com                    'type': 'websocket.send',
23*1848Szelenkov@nginx.com                    'bytes': m.get('bytes', None),
24*1848Szelenkov@nginx.com                    'text': m.get('text', None),
25*1848Szelenkov@nginx.com                }
26*1848Szelenkov@nginx.com            )
271625Smax.romanov@nginx.com
281625Smax.romanov@nginx.com        if m['type'] == 'websocket.disconnect':
29*1848Szelenkov@nginx.com            break
30