| 365 | |
| 366 | async def serve(d): |
| 367 | async def handler(reader, writer): |
| 368 | try: |
| 369 | line = await reader.readline() |
| 370 | if not line: return |
| 371 | resp = await d.handle(json.loads(line)) |
| 372 | writer.write((json.dumps(resp, default=str) + "\n").encode()) |
| 373 | await writer.drain() |
| 374 | except Exception as e: |
| 375 | log(f"conn: {e}") |
| 376 | try: |
| 377 | writer.write((json.dumps({"error": str(e)}) + "\n").encode()) |
| 378 | await writer.drain() |
| 379 | except Exception: |
| 380 | pass |
| 381 | finally: |
| 382 | writer.close() |
| 383 | |
| 384 | serve_task = asyncio.create_task(ipc.serve(NAME, handler)) |
| 385 | stop_task = asyncio.create_task(d.stop.wait()) |