novy-syndicate/src/client.ts

28 lines
982 B
TypeScript

import { BoxState, SetBox } from "./gen/box-protocol.js";
import { Observe } from "./gen/dataspace.js";
import { Assertion, Ref, Turn } from "./actor.js";
export default function (t: Turn, ds: Ref) {
console.log('Spawning Client');
let count = 0;
t.assert(ds, Observe(BoxState.constructorInfo.label, t.ref({
assert(t: Turn, [currentValue]: [number]): void {
// console.log(`Client ${t.actor.id}: got ${currentValue}`);
t.message(ds, SetBox(currentValue + 1));
}
})));
t.assert(ds, Observe(BoxState.constructorInfo.label, t.ref({
assert(_t: Turn, _assertion: Assertion): void {
count++;
// console.log('inc to', count, _assertion);
},
retract(t: Turn) {
if (--count === 0) {
console.log(`Client ${t.actor.id}: detected box termination`);
t.quit();
}
// console.log('dec to', count);
},
})));
}