11import { Injectable } from 'angular2/di' ;
2- import { MessageBus } from 'angular2/src/web_workers/shared/message_bus' ;
3- import { Serializer } from 'angular2/src/web_workers/shared/serializer' ;
42import {
53 RenderDirectiveMetadata ,
64 ProtoViewDto ,
@@ -9,55 +7,22 @@ import {
97 RenderProtoViewMergeMapping ,
108 RenderCompiler
119} from 'angular2/src/render/api' ;
12- import { EventEmitter , ObservableWrapper , PromiseWrapper , Promise } from 'angular2/src/facade/async' ;
1310import { RENDER_COMPILER_CHANNEL } from 'angular2/src/web_workers/shared/messaging_api' ;
14- import { ReceivedMessage } from 'angular2/src/web_workers/ui/impl ' ;
15- import { BaseException , Type } from 'angular2/src/facade/lang ' ;
11+ import { bind } from './bind ' ;
12+ import { ServiceMessageBrokerFactory } from 'angular2/src/web_workers/shared/service_message_broker ' ;
1613
17- // TODO(jteplitz602): Create parent UIComponent class #3703
1814@Injectable ( )
1915export class MessageBasedRenderCompiler {
20- private _sink : EventEmitter ;
21- private _source : EventEmitter ;
22-
23- constructor ( bus : MessageBus , private _serializer : Serializer ,
24- private _renderCompiler : RenderCompiler ) {
25- this . _sink = bus . to ( RENDER_COMPILER_CHANNEL ) ;
26- this . _source = bus . from ( RENDER_COMPILER_CHANNEL ) ;
27- ObservableWrapper . subscribe ( this . _source ,
28- ( message : StringMap < string , any > ) => this . _handleMessage ( message ) ) ;
29- }
30-
31- private _handleMessage ( map : StringMap < string , any > ) : void {
32- var message = new ReceivedMessage ( map ) ;
33- var args = message . args ;
34- var promise : Promise < any > ;
35- switch ( message . method ) {
36- case "compileHost" :
37- var directiveMetadata = this . _serializer . deserialize ( args [ 0 ] , RenderDirectiveMetadata ) ;
38- promise = this . _renderCompiler . compileHost ( directiveMetadata ) ;
39- this . _wrapWebWorkerPromise ( message . id , promise , ProtoViewDto ) ;
40- break ;
41- case "compile" :
42- var view = this . _serializer . deserialize ( args [ 0 ] , ViewDefinition ) ;
43- promise = this . _renderCompiler . compile ( view ) ;
44- this . _wrapWebWorkerPromise ( message . id , promise , ProtoViewDto ) ;
45- break ;
46- case "mergeProtoViewsRecursively" :
47- var views = this . _serializer . deserialize ( args [ 0 ] , RenderProtoViewRef ) ;
48- promise = this . _renderCompiler . mergeProtoViewsRecursively ( views ) ;
49- this . _wrapWebWorkerPromise ( message . id , promise , RenderProtoViewMergeMapping ) ;
50- break ;
51- default :
52- throw new BaseException ( "not implemented" ) ;
53- }
54- }
55-
56- private _wrapWebWorkerPromise ( id : string , promise : Promise < any > , type : Type ) : void {
57- PromiseWrapper . then ( promise , ( result : any ) => {
58- ObservableWrapper . callNext (
59- this . _sink ,
60- { 'type' : 'result' , 'value' : this . _serializer . serialize ( result , type ) , 'id' : id } ) ;
61- } ) ;
16+ constructor ( brokerFactory : ServiceMessageBrokerFactory , private _renderCompiler : RenderCompiler ) {
17+ var broker = brokerFactory . createMessageBroker ( RENDER_COMPILER_CHANNEL ) ;
18+ broker . registerMethod ( "compileHost" , [ RenderDirectiveMetadata ] ,
19+ bind ( this . _renderCompiler . compileHost , this . _renderCompiler ) ,
20+ ProtoViewDto ) ;
21+ broker . registerMethod ( "compile" , [ ViewDefinition ] ,
22+ bind ( this . _renderCompiler . compile , this . _renderCompiler ) , ProtoViewDto ) ;
23+ broker . registerMethod (
24+ "mergeProtoViewsRecursively" , [ RenderProtoViewRef ] ,
25+ bind ( this . _renderCompiler . mergeProtoViewsRecursively , this . _renderCompiler ) ,
26+ RenderProtoViewMergeMapping ) ;
6227 }
6328}
0 commit comments