33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
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);
|
|
}
|
|
})));
|
|
});
|
|
}
|