annotate src/app/services/feature-extraction/feature-extraction.service.ts @ 47:933c64ebcd13

Some extraction logic in place.
author Lucas Thompson <dev@lucas.im>
date Mon, 05 Dec 2016 16:57:34 +0000
parents 13f5f228ed98
children 8619f25ff52a
rev   line source
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 }