MCPcopy
hub / github.com/aio-libs/aiohttp / handle_request

Method handle_request

examples/wssrv.py:40–112  ·  view source on GitHub ↗
(self, message, payload)

Source from the content-addressed store, hash-verified

38
39 @asyncio.coroutine
40 def handle_request(self, message, payload):
41 upgrade = 'websocket' in message.headers.get('UPGRADE', '').lower()
42
43 if upgrade:
44 # websocket handshake
45 status, headers, parser, writer, protocol = websocket.do_handshake(
46 message.method, message.headers, self.transport)
47
48 resp = aiohttp.Response(
49 self.writer, status, http_version=message.version)
50 resp.add_headers(*headers)
51 resp.send_headers()
52
53 # install websocket parser
54 dataqueue = self.reader.set_parser(parser)
55
56 # notify everybody
57 print('{}: Someone joined.'.format(os.getpid()))
58 for wsc in self.clients:
59 wsc.send(b'Someone joined.')
60 self.clients.append(writer)
61 self.parent.send(b'Someone joined.')
62
63 # chat dispatcher
64 while True:
65 try:
66 msg = yield from dataqueue.read()
67 except:
68 # client dropped connection
69 break
70
71 if msg.tp == websocket.MSG_PING:
72 writer.pong()
73
74 elif msg.tp == websocket.MSG_TEXT:
75 data = msg.data.strip()
76 print('{}: {}'.format(os.getpid(), data))
77 for wsc in self.clients:
78 if wsc is not writer:
79 wsc.send(data.encode())
80 self.parent.send(data)
81
82 elif msg.tp == websocket.MSG_CLOSE:
83 break
84
85 # notify everybody
86 print('{}: Someone disconnected.'.format(os.getpid()))
87 self.parent.send(b'Someone disconnected.')
88 self.clients.remove(writer)
89 for wsc in self.clients:
90 wsc.send(b'Someone disconnected.')
91
92 else:
93 # send html page with js chat
94 response = aiohttp.Response(
95 self.writer, 200, http_version=message.version)
96 response.add_header('Transfer-Encoding', 'chunked')
97 response.add_header('Content-type', 'text/html')

Callers

nothing calls this directly

Calls 13

write_eofMethod · 0.95
add_headersMethod · 0.80
send_headersMethod · 0.80
set_parserMethod · 0.80
appendMethod · 0.80
encodeMethod · 0.80
add_headerMethod · 0.80
getMethod · 0.45
sendMethod · 0.45
readMethod · 0.45
pongMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected