dev@47
|
1 import {Injectable} from '@angular/core';
|
dev@47
|
2 import {
|
dev@47
|
3 ListResponse, ProcessResponse, ProcessRequest,
|
dev@47
|
4 ListRequest
|
dev@47
|
5 } from "piper";
|
dev@47
|
6 import {SimpleRequest} from "piper/HigherLevelUtilities";
|
dev@47
|
7 import {FeatureList} from "piper/Feature";
|
dev@44
|
8
|
dev@47
|
9 interface RequestMessage<RequestType> {
|
dev@47
|
10 method: string;
|
dev@47
|
11 params: RequestType;
|
dev@47
|
12 }
|
dev@47
|
13
|
dev@47
|
14 interface ResponseMessage<ResponseType> {
|
dev@47
|
15 method: string;
|
dev@47
|
16 result: ResponseType;
|
dev@47
|
17 }
|
dev@40
|
18
|
dev@40
|
19 @Injectable()
|
dev@40
|
20 export class FeatureExtractionService {
|
dev@40
|
21
|
dev@40
|
22 private worker: Worker;
|
dev@40
|
23
|
dev@44
|
24
|
dev@40
|
25 constructor() {
|
dev@40
|
26 this.worker = new Worker('bootstrap-feature-extraction-worker.js');
|
dev@40
|
27 }
|
dev@40
|
28
|
dev@47
|
29 list(): Promise<ListResponse> {
|
dev@47
|
30 return this.request<ListRequest, ListResponse>(
|
dev@47
|
31 {method: 'list', params: {}},
|
dev@47
|
32 (ev: MessageEvent) => ev.data.result.available !== undefined
|
dev@47
|
33 ).then(msg => msg.result);
|
dev@40
|
34 }
|
dev@40
|
35
|
dev@47
|
36 process(request: SimpleRequest): Promise<FeatureList> {
|
dev@47
|
37 return this.request<SimpleRequest, FeatureList>(
|
dev@47
|
38 {method: 'process', params: request},
|
dev@47
|
39 (ev: MessageEvent) => ev.data.method === 'process'
|
dev@47
|
40 );
|
dev@44
|
41 }
|
dev@44
|
42
|
dev@47
|
43 private request<Req, Res>(request: RequestMessage<Req>,
|
dev@47
|
44 predicate: (ev: MessageEvent) => boolean)
|
dev@47
|
45 : Promise<ResponseMessage<Res>> {
|
dev@44
|
46 return new Promise(res => {
|
dev@47
|
47 const listener = (ev: MessageEvent) => {
|
dev@44
|
48 this.worker.removeEventListener('message', listener);
|
dev@44
|
49 if (predicate(ev))
|
dev@44
|
50 res(ev.data);
|
dev@44
|
51 };
|
dev@44
|
52 this.worker.addEventListener('message', listener);
|
dev@44
|
53 this.worker.postMessage(request);
|
dev@47
|
54 }).catch(err => console.error(err));
|
dev@44
|
55 }
|
dev@40
|
56 }
|