2017-01-31 10 views
0

私は現在、STOMPを使用してwebsocketを接続するのに https://github.com/NaikSoftware/StompProtocolAndroid を使用しています。私は、接続が確立された後、サーバーから送信された新しいサブスクリプションチャネルを聞くしようとしています。ここstompクライアントが接続された後にトピック/サブスクリプションを追加します


public class TestActivity extends AppCompatActivity { 

private StompClient mStompCLient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 
    ButterKnife.bind(this); 
    setSupportActionBar(toolbar); 

    mStompCLient = Stomp.over(WebSocket.class, BASE_URL); 

    mStompCLient.topic("/topic/online/" + mSharedPreferences.getPrivateKey()).subscribe(new Subscriber<StompMessage>() { 
     @Override 
     public void onCompleted() { 
      Log.i(TAG, "/topic/online/ onCompleted: "); 
     } 

     @Override 
     public void onError(Throwable e) { 
      Log.i(TAG, "/topic/online/ onError: " + e.getMessage()); 
     } 

     @Override 
     public void onNext(StompMessage stompMessage) { 
      Log.d(TAG, "/topic/online/ onNext: " + stompMessage.getPayload()); 
String content = ""; 
JSONObject jsonResponse = null; 
      try { 
       jsonResponse = new JSONObject(stompMessage.getPayload()); 
       content = jsonResponse.getString("uri"); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
listenToUpdatesFromFinalUri(content); 
     } 
    }); 

    mStompCLient.lifecycle().subscribe(lifecycleEvent -> { 
     Log.i(TAG, "onCreate: " + lifecycleEvent.getMessage()); 
     switch (lifecycleEvent.getType()) { 

      case OPENED: 
       Log.d(TAG, "Stomp connection opened"); 
       break; 

      case ERROR: 
       Log.e(TAG, "Error", lifecycleEvent.getException()); 

       break; 

      case CLOSED: 
       Log.d(TAG, "Stomp connection closed : " + lifecycleEvent.toString() + " :msg: " + lifecycleEvent.getMessage() + " :escep: " + lifecycleEvent.getException() + " :headers: " + lifecycleEvent.getHandshakeResponseHeaders() + " :type: " + lifecycleEvent.getType()); 
       break; 
     } 
    }); 

mStompCLient.connect(); 
} 

private void listenToUpdatesFromFinalUri(String content) { 
    mStompCLient.topic(content).subscribe(new Subscriber<StompMessage>() { 
       @Override 
       public void onCompleted() { 
        Log.i(TAG," onCompleted: "); 
       } 

       @Override 
       public void onError(Throwable e) { 
        Log.i(TAG, " onError: " + e.getMessage()); 
       } 

       @Override 
       public void onNext(StompMessage stompMessage) { 
        Log.d(TAG, " onNext: " + stompMessage.getPayload()); 
       } 
      }); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    disconnectStomp(); 
} 

private void disconnectStomp() { 
    mStompCLient.disconnect(); 
} 
} 

ように私は簡単な実装を持っています。これは、接続が呼び出される前にsubscribe()が呼び出された場合に機能します。しかし、listenToUpdatesFromFinalUri()関数で購読している最終的なuri/subscriptionチャンネルは静的ではないので、接続する前に購読を追加する必要はありません。私は現在、最終的なURI /サブスクリプションに対する回答を得ることができません。どんな助けもありがとうございます。

答えて

0

この問題は、新しいバージョン1.1.6で解決されました。

関連する問題