import { BoxState, SetBox } from "./box-protocol.js"; import { Handle, Ref, Turn } from "./actor.js"; import { Observe } from "./dataspace.js"; let startTime = Date.now(); let prevValue = 0; export default function (t: Turn, [ds, LIMIT, REPORT_EVERY]: [Ref, number, number]) { t.spawn(t => { console.log('Spawning Box'); let valueHandle: Handle | undefined; function setValue(t: Turn, value: number) { valueHandle = t.replace(ds, valueHandle, BoxState(value)); } setValue(t, 0); t.assert(ds, Observe(SetBox.constructorInfo.label, t.ref({ message(t: Turn, [newValue]: [number]): void { // console.log(`Box: got ${newValue}`); if (newValue % REPORT_EVERY === 0) { const endTime = Date.now(); const delta = (endTime - startTime) / 1000.0; const count = newValue - prevValue; prevValue = newValue; startTime = endTime; console.log(`Box: got ${newValue} (${count / delta} Hz)`); } if (newValue === LIMIT) t.quit(); setValue(t, newValue); } }))); }); }