2017-03-21 7 views
0

外部のJavaScript Webソケットライブラリを使用してデバイスを接続して制御しようとしています。現在私は、私の角度のサービスからこれを行うことができます。私はコンポーネントに接続オブジェクトを渡すことができません。サービスクライアントオブジェクトがあるときにどのように私は、コンポーネントにアップデートを入手することができますupdated.Canいずれか私を助けてくださいサービスからのWebソケットオブジェクトをコンポーネントに同期する方法 - 角2

コンポーネント・コードの下

doConnect(data){ 
    this.submitted = true; 
    this.ipaddress = data.ipaddress; 
    this.portnumber = data.portnumber; 
    this.data = JSON.stringify(data); 
    console.log(this.data); 
    if(this.ipaddress===null && this.portnumber===null){ 
     console.log('Null'); 
    }else{ 
    localStorage.setItem("ipaddress", this.ipaddress); 
    localStorage.setItem("portnumber", this.portnumber); 

    //calling the get connect from component 
    this.connectService.getConnect(this.ipaddress,this.portnumber); 
    if(localStorage.getItem("clientStatus")=='connected'){ 
    this._router.navigate(['Master']); 
    }else{ 
    this._router.navigate(['Home']); 
    } 
    } 
} 

は私connectServiceコードは、私が解決策を見つけた

getConnect(ipaddress,portnumber){ 
    console.log('coming'); 
    var t = ipaddress; 
    var p = portnumber; 
    console.log(t,p); 
    client = new linear.client({transports: [ 
           {type: 'websocket', 
           host: t, port: p} 
           ]}); 
    client.connect(); 
    this.getStatusFromMcx(); 

    var osbervable = Rx.Observable.create (function (obs) { 
    // Handle messages 
    client.transport.onopen = obs.onOpen.bind(obs); 
    client.onnotify = obs.onNext.bind(obs); 
    client.onerror = obs.onError.bind(obs); 
    client.transport.onclose = obs.onCompleted.bind(obs); 

    // Return way to unsubscribe 
    return client.ondisconnect.bind(client); 
    }); 

答えて

0

です私の問題のために。私はこの答えを共有しています。これは、Webソケットを使用して外部デバイスに接続する人を助けるかもしれないからです。私は一定の間隔で観測可能なものを使用しています。

let stream$ = new Observable(observer => { 
    let interval = setInterval(() =>{ 
     observer.next(client.transport.state); 
     observer.complete(); 
    },1000); 
    return() =>{ 
     clearInterval(interval); 
    } 
    }); 
    return stream$; 

私はちょうどその方法に加入し、接続の詳細を取得しています。

this.subscription = this.AppService.getConnect(this.ipaddress,this.portnumber) 
    .retry(1) 
    .subscribe(
     value => { 
     console.log("value+++++",value); 
     spinner.stop() 
     if(value=="disconnected" || value=="connecting"){ 
      localStorage.setItem("clientStatus", "disconnected"); 
      spinner.spin(target); 
     }else{ 
      localStorage.setItem("clientStatus", "connected"); 
      this._router.navigate(['dashboard']); 
     } 
ngOnDestroy() { 
// prevent memory leak when component is destroyed 
this.subscription.unsubscribe(); 
} 
関連する問題