2016-10-19 12 views
0

socket.ioがRxJSを使用して再接続するときにソケットイベントに再登録しようとしています。RxJS socket.io retryWhen()との再接続

以下は、私が今までに持っているものの簡略化された簡略版です。私はsocket.ioをObservableでラップしています。Observableは、すべてのソケットイベントをフィルタリングするObservableによってラップされています。私はretryWhenを使用したいソケットが再接続し、これを達成する方法がわからない後...

私は正しい方向に私を指摘できますか?

function socket() { 
    return Observable.create(subscriber => { 
     let socket = io('my_socket_path'); 
     let _onevent = socket.onevent; 

     socket.onevent = (packet) => { 
      subscriber.next(packet); 
      _onevent.call(socket, packet); 
     }; 

     socket.on('disconnect', (data) => { 
      subscriber.error(data); 
     }); 

     return() => { 
      socket.close(); 
     }; 
    }).share(); 
} 
function getSocketEvent(event) { 
    const socket = socket(); 
    return Observable.create(subscriber => { 
     const eventSubscription = socket 
      .filter(packet => packet.data[0] === event) 
      .subscribe(packet => { 
       subscriber.next(packet); 
      }); 

     return() => { 
      eventSubscription.unsubscribe(); 
     }; 
    }).share() 
     .retryWhen(
     //Not sure how to trigger re-subscription here when socket reconnects 
    )); 
} 
getSocketEvent('myGreatEvent').subscribe(data => { 
    console.log(data); 
}); 

お礼

更新:

... 
const eventSubscription = socket 
     .filter(packet => packet.data[0] === event) 
     .subscribe(subscriber); //now triggers retryWhen()... 
... 
:私はちょうどこのようなソケットのサブスクリプションに加入者を渡すときretryWhen()が呼び出されていることに気づいた

この新しい発見でも、なぜサブスクライバを渡すだけでretryWhenが呼び出されるのかわかりません。また、ソケットの再登録方法オンラインに戻ります。

答えて

1

は初心者なので、私は自分の問題と、それが誰かを助けた場合に自分の質問に答える...

は、私が購読中のすべてのハンドラを伝承するために必要な、それは簡単だったが判明しました。

.subscribe(
    (packet) => subscriber.next(packet), 
    (error) => subscriber.error(error), 
    () => console.log('completed') 
); 
関連する問題