mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-23 03:28:33 +00:00
playing with workers
This commit is contained in:
parent
6eec4277c1
commit
0006f6483d
@ -19,17 +19,8 @@ export class Cyclist {
|
|||||||
this.num_cycles_at_cps_change = 0;
|
this.num_cycles_at_cps_change = 0;
|
||||||
this.onToggle = onToggle;
|
this.onToggle = onToggle;
|
||||||
this.latency = latency; // fixed trigger time offset
|
this.latency = latency; // fixed trigger time offset
|
||||||
this.broadcast = new BroadcastChannel('strudel_clock');
|
|
||||||
this.nextCycleStartTime = 0;
|
this.nextCycleStartTime = 0;
|
||||||
this.broadcast.onmessage = (event) => {
|
|
||||||
const data = event.data;
|
|
||||||
const { cps, sendTime, phase, nextCycleStartTime, cycle } = data;
|
|
||||||
this.cps = cps;
|
|
||||||
const now = Date.now();
|
|
||||||
const messageLatency = now - sendTime;
|
|
||||||
console.log({ messageLatency });
|
|
||||||
this.nextCycleStartTime = now + nextCycleStartTime - messageLatency;
|
|
||||||
};
|
|
||||||
this.clock = createClock(
|
this.clock = createClock(
|
||||||
getTime,
|
getTime,
|
||||||
// called slightly before each cycle
|
// called slightly before each cycle
|
||||||
@ -66,16 +57,6 @@ export class Cyclist {
|
|||||||
onTrigger?.(hap, deadline, duration, this.cps);
|
onTrigger?.(hap, deadline, duration, this.cps);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
console.log(1 - (num_cycles_since_cps_change % 1));
|
|
||||||
if (tick % 1 === 0) {
|
|
||||||
// this.broadcast.postMessage({
|
|
||||||
// cps: this.cps,
|
|
||||||
// sendTime: Date.now(),
|
|
||||||
// phase,
|
|
||||||
// nextCycleStartTime: (1 - (num_cycles_since_cps_change % 1)) * this.cps * 1000,
|
|
||||||
// cycle: num_cycles_since_cps_change,
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger(`[cyclist] error: ${e.message}`);
|
logger(`[cyclist] error: ${e.message}`);
|
||||||
onError?.(e);
|
onError?.(e);
|
||||||
@ -93,27 +74,14 @@ export class Cyclist {
|
|||||||
this.onToggle?.(v);
|
this.onToggle?.(v);
|
||||||
}
|
}
|
||||||
start() {
|
start() {
|
||||||
const date = Date.now();
|
this.num_ticks_since_cps_change = 0;
|
||||||
let wait = this.nextCycleStartTime - date;
|
this.num_cycles_at_cps_change = 0;
|
||||||
wait = Math.max(0, wait);
|
if (!this.pattern) {
|
||||||
console.log({ wait });
|
throw new Error('Scheduler: no pattern set! call .setPattern first.');
|
||||||
|
}
|
||||||
this.broadcast.postMessage({
|
logger('[cyclist] start');
|
||||||
type: 'request_start',
|
this.clock.start();
|
||||||
});
|
this.setStarted(true);
|
||||||
|
|
||||||
this.broadcast.onmessage;
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
this.num_ticks_since_cps_change = 0;
|
|
||||||
this.num_cycles_at_cps_change = 0;
|
|
||||||
if (!this.pattern) {
|
|
||||||
throw new Error('Scheduler: no pattern set! call .setPattern first.');
|
|
||||||
}
|
|
||||||
logger('[cyclist] start');
|
|
||||||
this.clock.start();
|
|
||||||
this.setStarted(true);
|
|
||||||
}, wait);
|
|
||||||
}
|
}
|
||||||
pause() {
|
pause() {
|
||||||
logger('[cyclist] pause');
|
logger('[cyclist] pause');
|
||||||
|
|||||||
17
packages/core/cyclistworker.js
Normal file
17
packages/core/cyclistworker.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
const ports = [];
|
||||||
|
|
||||||
|
self.onconnect = function (ev) {
|
||||||
|
let port = ev.ports[0];
|
||||||
|
port.onmessage = (e) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
ports.forEach((p) => p.postMessage([e.data, ev.ports.length]));
|
||||||
|
}, 300);
|
||||||
|
};
|
||||||
|
port.start();
|
||||||
|
ports.push(port);
|
||||||
|
};
|
||||||
|
self.onmessage = ({ data: { question } }) => {
|
||||||
|
self.postMessage({
|
||||||
|
answer: 42,
|
||||||
|
});
|
||||||
|
};
|
||||||
5
packages/core/deep-thought.js
Normal file
5
packages/core/deep-thought.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
self.onmessage = ({ data: { question } }) => {
|
||||||
|
self.postMessage({
|
||||||
|
answer: 42,
|
||||||
|
});
|
||||||
|
};
|
||||||
@ -30,6 +30,13 @@ export function repl({
|
|||||||
started: false,
|
started: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const worker = new Worker(new URL('./deep-thought.js', import.meta.url));
|
||||||
|
worker.postMessage({
|
||||||
|
question: 'The Answer to the Ultimate Question of Life, The Universe, and Everything.',
|
||||||
|
});
|
||||||
|
worker.onmessage = ({ data: { answer } }) => {
|
||||||
|
console.log(answer);
|
||||||
|
};
|
||||||
const updateState = (update) => {
|
const updateState = (update) => {
|
||||||
Object.assign(state, update);
|
Object.assign(state, update);
|
||||||
state.isDirty = state.code !== state.activeCode;
|
state.isDirty = state.code !== state.activeCode;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user