(self)
| 149 | |
| 150 | @asyncio.coroutine |
| 151 | def heartbeat(self): |
| 152 | # setup pipes |
| 153 | read_transport, read_proto = yield from self.loop.connect_read_pipe( |
| 154 | aiohttp.StreamProtocol, os.fdopen(self.up_read, 'rb')) |
| 155 | write_transport, _ = yield from self.loop.connect_write_pipe( |
| 156 | aiohttp.StreamProtocol, os.fdopen(self.down_write, 'wb')) |
| 157 | |
| 158 | reader = read_proto.reader.set_parser(websocket.WebSocketParser) |
| 159 | writer = websocket.WebSocketWriter(write_transport) |
| 160 | |
| 161 | asyncio.Task(self.start_server(writer)) |
| 162 | |
| 163 | while True: |
| 164 | try: |
| 165 | msg = yield from reader.read() |
| 166 | except: |
| 167 | print('Supervisor is dead, {} stopping...'.format(os.getpid())) |
| 168 | self.loop.stop() |
| 169 | break |
| 170 | |
| 171 | if msg.tp == websocket.MSG_PING: |
| 172 | writer.pong() |
| 173 | elif msg.tp == websocket.MSG_CLOSE: |
| 174 | break |
| 175 | elif msg.tp == websocket.MSG_TEXT: # broadcast message |
| 176 | for wsc in self.clients: |
| 177 | wsc.send(msg.data.strip().encode()) |
| 178 | |
| 179 | read_transport.close() |
| 180 | write_transport.close() |
| 181 | |
| 182 | |
| 183 | class Worker: |
no test coverage detected