b2b/src/app/worker.service.ts

34 lines
656 B
TypeScript

import { Injectable } from '@angular/core';
import { Message } from './types';
@Injectable({
providedIn: 'root',
})
export class WorkerService {
protected worker: Worker | undefined;
constructor() {
this.initWorker();
}
private initWorker(): void {
if (typeof Worker !== 'undefined') {
this.worker = new Worker(new URL('./app.worker', import.meta.url));
}
}
public connect(
fn: (messageEvent: MessageEvent) => void,
): void {
this.worker!.onmessage = fn;
}
public postMessage(message: Message) {
this.worker?.postMessage(message);
}
public terminate(): void {
this.worker?.terminate();
}
}