novy-syndicate/src/examples/readline.ts

20 lines
712 B
TypeScript

import { Turn, Entity, Facet } from '../runtime/actor.js';
import readline from 'readline';
export function attachReadline(t: Turn, entity: Partial<Entity>): Facet {
const ref = t.ref(entity);
return t.facet(t => {
let rl: readline.Interface | null =
readline.createInterface({ input: process.stdin, output: process.stdout });
function shutdown(_t: Turn) {
rl?.close();
rl = null;
}
t.assert(ref, true);
t.activeFacet.actor.atExit(shutdown);
t.activeFacet.onStop(shutdown);
rl.on('line', (line: string) => t.freshen(t => t.message(ref, line)));
rl.on('close', () => t.freshen(t => t.stop()));
});
}