StompProtocolAndroid icon indicating copy to clipboard operation
StompProtocolAndroid copied to clipboard

How to determine whether the current socket is connecting state

Open Mukesh1507 opened this issue 5 years ago • 0 comments

How to detected that socket is connecting. After refer https://github.com/NaikSoftware/StompProtocolAndroid/issues/109. Variables are not declare in StompClient.

I have try make connection from two places. It go to connect for two times. I have received 2 times connected event. It start separate queue for connection on mStompClient.connect(). After fewseconds it crash.

Crash ua.naiksoftware.stomp.provider.AbstractConnectionProvider.lambda$send$0 AbstractConnectionProvider.java:79 ua.naiksoftware.stomp.provider.-$$Lambda$AbstractConnectionProvider$YT0nnX9-2PEI5qobethPTKDOT_o.call Unknown Source:4 io.reactivex.internal.operators.completable.CompletableFromCallable.subscribeActual CompletableFromCallable.java:36 io.reactivex.Completable.subscribe Completable.java:2301 io.reactivex.internal.operators.completable.CompletableConcatArray$ConcatInnerObserver.next CompletableConcatArray.java:89 io.reactivex.internal.operators.completable.CompletableConcatArray$ConcatInnerObserver.onComplete CompletableConcatArray.java:65 io.reactivex.internal.operators.maybe.MaybeIgnoreElementCompletable$IgnoreMaybeObserver.onComplete MaybeIgnoreElementCompletable.java:79 io.reactivex.internal.operators.observable.ObservableElementAtMaybe$ElementAtObserver.onComplete ObservableElementAtMaybe.java:102 io.reactivex.internal.observers.BasicFuseableObserver.onComplete BasicFuseableObserver.java:119 io.reactivex.internal.util.NotificationLite.accept NotificationLite.java:239 io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.test BehaviorSubject.java:569 io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.emitNext BehaviorSubject.java:564 io.reactivex.subjects.BehaviorSubject.onComplete BehaviorSubject.java:292 ua.naiksoftware.stomp.StompClient.lambda$disconnectCompletable$12 StompClient.java:232 ua.naiksoftware.stomp.-$$Lambda$StompClient$kVxuI7X9rCmrMqSYYxig5SXBJ2U.run Unknown Source:2 io.reactivex.internal.operators.completable.CompletableDoFinally$DoFinallyObserver.runFinally CompletableDoFinally.java:96 io.reactivex.internal.operators.completable.CompletableDoFinally$DoFinallyObserver.onComplete CompletableDoFinally.java:79 io.reactivex.internal.operators.completable.CompletableFromAction.subscribeActual CompletableFromAction.java:43 io.reactivex.Completable.subscribe Completable.java:2301 io.reactivex.internal.operators.completable.CompletableDoFinally.subscribeActual CompletableDoFinally.java:43 io.reactivex.Completable.subscribe Completable.java:2301 io.reactivex.Completable.subscribe Completable.java:2375 ua.naiksoftware.stomp.StompClient.disconnect StompClient.java:214 ua.naiksoftware.stomp.StompClient.lambda$connect$2 StompClient.java:131 ua.naiksoftware.stomp.-$$Lambda$StompClient$vVcYMb21o9E34jwNPpF11oh0iG4.accept Unknown Source:6 io.reactivex.internal.observers.LambdaObserver.onNext LambdaObserver.java:63 io.reactivex.subjects.PublishSubject$PublishDisposable.onNext PublishSubject.java:308 io.reactivex.subjects.PublishSubject.onNext PublishSubject.java:228 ua.naiksoftware.stomp.provider.AbstractConnectionProvider.emitLifecycleEvent AbstractConnectionProvider.java:114 ua.naiksoftware.stomp.provider.OkHttpConnectionProvider$1.onFailure OkHttpConnectionProvider.java:88 okhttp3.internal.ws.RealWebSocket.failWebSocket RealWebSocket.java:571 okhttp3.internal.ws.RealWebSocket$2.onFailure RealWebSocket.java:221 okhttp3.RealCall$AsyncCall.execute RealCall.java:215 okhttp3.internal.NamedRunnable.run NamedRunnable.java:32 java.util.concurrent.ThreadPoolExecutor.runWorker ThreadPoolExecutor.java:1167

1. Request for Connection if (!mStompClient.isConnected) connectToWebSocket()

      fun connectToWebSocket() {
       resetSubscriptions()
      val dispLifecycle = mStompClient.lifecycle()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { lifecycleEvent: LifecycleEvent ->
            when (lifecycleEvent.type) {

                LifecycleEvent.Type.OPENED -> {
                    // "Stomp connection opened"
                    Log.v("WebSocket", "Connected")
                    _webSocketStatus.value = Event(true)
                }
                LifecycleEvent.Type.ERROR -> {

                }
                LifecycleEvent.Type.CLOSED -> {
                    //"Stomp connection closed"
                }
                LifecycleEvent.Type.FAILED_SERVER_HEARTBEAT -> {
                    //"Stomp failed server heartbeat"
                }
                else -> {
                    //stomp event ype null
                }
            }
        }
        compositeDisposable.add(dispLifecycle)
        mStompClient.connect()

}

Mukesh1507 avatar Oct 24 '20 05:10 Mukesh1507