34 lines
656 B
TypeScript
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();
|
|
}
|
|
}
|