s3si.ts/src/jsonrpc/deno.ts

36 lines
850 B
TypeScript
Raw Normal View History

2024-01-30 02:38:39 -05:00
import { readLines } from "../utils.ts";
2023-03-05 07:01:48 -05:00
import { Transport } from "./types.ts";
export class DenoIO implements Transport {
lines: AsyncIterableIterator<string>;
2024-01-30 01:30:56 -05:00
writer: WritableStream<Uint8Array>;
2023-03-05 07:01:48 -05:00
constructor({ reader, writer }: {
2024-01-30 01:30:56 -05:00
reader: ReadableStream<Uint8Array>;
writer: WritableStream<Uint8Array>;
2023-03-05 07:01:48 -05:00
}) {
2024-01-30 02:38:39 -05:00
this.lines = readLines(reader);
2023-03-05 07:01:48 -05:00
this.writer = writer;
}
async recv(): Promise<string | undefined> {
const result = await this.lines.next();
if (!result.done) {
2023-03-05 12:56:07 -05:00
return result.value;
2023-03-05 07:01:48 -05:00
}
return undefined;
}
async send(data: string) {
2024-01-30 02:38:39 -05:00
const writer = this.writer.getWriter();
try {
await writer.ready;
await writer.write(new TextEncoder().encode(data + "\n"));
} finally {
writer.releaseLock();
}
2023-03-05 07:01:48 -05:00
}
async close() {
await this.writer.close();
}
}