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