Skip to content

Commit d67eaeb

Browse files
committed
Fix subscribing
1 parent 18990db commit d67eaeb

File tree

5 files changed

+24
-42
lines changed

5 files changed

+24
-42
lines changed

lib/src/main/java/ua/naiksoftware/stomp/AbstractConnectionProvider.java

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,8 @@
44
import android.support.annotation.Nullable;
55
import android.util.Log;
66

7-
import java.util.concurrent.TimeUnit;
8-
9-
import io.reactivex.BackpressureStrategy;
107
import io.reactivex.Completable;
11-
import io.reactivex.CompletableSource;
12-
import io.reactivex.Flowable;
138
import io.reactivex.Observable;
14-
import io.reactivex.subjects.BehaviorSubject;
159
import io.reactivex.subjects.PublishSubject;
1610

1711
/**
@@ -28,12 +22,10 @@ abstract class AbstractConnectionProvider implements ConnectionProvider {
2822
private final PublishSubject<LifecycleEvent> mLifecycleStream;
2923
@NonNull
3024
private final PublishSubject<String> mMessagesStream;
31-
final BehaviorSubject<Boolean> mConnectionStream;
3225

3326
AbstractConnectionProvider() {
3427
mLifecycleStream = PublishSubject.create();
3528
mMessagesStream = PublishSubject.create();
36-
mConnectionStream = BehaviorSubject.createDefault(false);
3729
}
3830

3931
@NonNull
@@ -54,27 +46,13 @@ public Observable<String> messages() {
5446

5547
@Override
5648
public Completable disconnect() {
57-
CompletableSource ex = Completable.error(new IllegalStateException("Attempted to disconnect when already disconnected"));
58-
59-
Completable block = mConnectionStream
60-
.filter(connected -> connected).firstOrError().toCompletable()
61-
.timeout(1, TimeUnit.SECONDS, ex);
62-
6349
return Completable
64-
.fromAction(this::rawDisconnect)
65-
.startWith(block);
50+
.fromAction(this::rawDisconnect);
6651
}
6752

6853
private Completable initSocket() {
69-
CompletableSource ex = Completable.error(new IllegalStateException("Attempted to connect when already connected"));
70-
71-
Completable block = mConnectionStream
72-
.filter(connected -> !connected).firstOrError().toCompletable()
73-
.timeout(1, TimeUnit.SECONDS, ex);
74-
7554
return Completable
76-
.fromAction(this::createWebSocketConnection)
77-
.startWith(block);
55+
.fromAction(this::createWebSocketConnection);
7856
}
7957

8058
// Doesn't do anything at all, only here as a stub
@@ -130,8 +108,6 @@ public Completable send(String stompMessage) {
130108
void emitLifecycleEvent(@NonNull LifecycleEvent lifecycleEvent) {
131109
Log.d(TAG, "Emit lifecycle event: " + lifecycleEvent.getType().name());
132110
mLifecycleStream.onNext(lifecycleEvent);
133-
if (lifecycleEvent.getType().equals(LifecycleEvent.Type.CLOSED))
134-
mConnectionStream.onNext(false);
135111
}
136112

137113
void emitMessage(String stompMessage) {
@@ -144,9 +120,4 @@ void emitMessage(String stompMessage) {
144120
public Observable<LifecycleEvent> lifecycle() {
145121
return mLifecycleStream;
146122
}
147-
148-
@Override
149-
public Flowable<Boolean> connected() {
150-
return mConnectionStream.toFlowable(BackpressureStrategy.LATEST);
151-
}
152123
}

lib/src/main/java/ua/naiksoftware/stomp/ConnectionProvider.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,4 @@ public interface ConnectionProvider {
3333
Completable disconnect();
3434

3535
Completable setHeartbeat(int ms);
36-
37-
Flowable<Boolean> connected();
3836
}

lib/src/main/java/ua/naiksoftware/stomp/OkHttpConnectionProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ public void onClosing(final WebSocket webSocket, final int code, final String re
9393
}
9494

9595
);
96-
mConnectionStream.onNext(true);
9796
}
9897

9998
@Override

lib/src/main/java/ua/naiksoftware/stomp/WebSocketsConnectionProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ public void onError(Exception ex) {
110110

111111
mWebSocketClient.connect();
112112
haveConnection = true;
113-
mConnectionStream.onNext(true);
114113
}
115114

116115
@Override

lib/src/main/java/ua/naiksoftware/stomp/client/StompClient.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.reactivex.CompletableSource;
1616
import io.reactivex.Flowable;
1717
import io.reactivex.disposables.Disposable;
18+
import io.reactivex.subjects.BehaviorSubject;
1819
import io.reactivex.subjects.PublishSubject;
1920
import ua.naiksoftware.stomp.ConnectionProvider;
2021
import ua.naiksoftware.stomp.LifecycleEvent;
@@ -39,6 +40,7 @@ public class StompClient {
3940

4041
private PublishSubject<StompMessage> mMessageStream;
4142
private ConcurrentHashMap<String, Flowable<StompMessage>> mStreamMap;
43+
private final BehaviorSubject<Boolean> mConnectionStream;
4244
private Parser parser;
4345
private Disposable mLifecycleDisposable;
4446
private Disposable mMessagesDisposable;
@@ -49,6 +51,7 @@ public StompClient(ConnectionProvider connectionProvider) {
4951
mConnectionProvider = connectionProvider;
5052
mMessageStream = PublishSubject.create();
5153
mStreamMap = new ConcurrentHashMap<>();
54+
mConnectionStream = BehaviorSubject.createDefault(false);
5255
parser = Parser.NONE;
5356
}
5457

@@ -113,12 +116,12 @@ public void connect(@Nullable List<StompHeader> _headers) {
113116
break;
114117

115118
case CLOSED:
116-
mConnected = false;
119+
setConnected(false);
117120
isConnecting = false;
118121
break;
119122

120123
case ERROR:
121-
mConnected = false;
124+
setConnected(false);
122125
isConnecting = false;
123126
break;
124127
}
@@ -130,17 +133,24 @@ public void connect(@Nullable List<StompHeader> _headers) {
130133
.doOnNext(this::callSubscribers)
131134
.filter(msg -> msg.getStompCommand().equals(StompCommand.CONNECTED))
132135
.subscribe(stompMessage -> {
133-
mConnected = true;
136+
setConnected(true);
134137
isConnecting = false;
138+
135139
});
136140
}
137141

142+
private void setConnected(boolean connected) {
143+
mConnected = connected;
144+
mConnectionStream.onNext(mConnected);
145+
}
146+
138147
/**
139148
* Disconnect from server, and then reconnect with the last-used headers
140149
*/
141150
public void reconnect() {
142-
disconnect();
143-
connect(mHeaders);
151+
disconnectCompletable()
152+
.subscribe(() -> connect(mHeaders),
153+
e -> Log.e(tag, "Disconnect error", e));
144154
}
145155

146156
public Completable send(String destination) {
@@ -156,7 +166,7 @@ public Completable send(String destination, String data) {
156166

157167
public Completable send(@NonNull StompMessage stompMessage) {
158168
Completable completable = mConnectionProvider.send(stompMessage.compile(legacyWhitespace));
159-
CompletableSource connectionComplete = mConnectionProvider.connected()
169+
CompletableSource connectionComplete = mConnectionStream
160170
.filter(isConnected -> isConnected)
161171
.firstOrError().toCompletable();
162172
return completable
@@ -172,9 +182,14 @@ public Flowable<LifecycleEvent> lifecycle() {
172182
}
173183

174184
public void disconnect() {
185+
disconnectCompletable().subscribe(() -> {}, e -> Log.e(tag, "Disconnect error", e));
186+
}
187+
188+
public Completable disconnectCompletable() {
175189
mLifecycleDisposable.dispose();
176190
mMessagesDisposable.dispose();
177-
mConnectionProvider.disconnect().subscribe(() -> mConnected = false, e -> Log.e(tag, "Disconnect error", e));
191+
return mConnectionProvider.disconnect()
192+
.doOnComplete(() -> setConnected(false));
178193
}
179194

180195
public Flowable<StompMessage> topic(String destinationPath) {

0 commit comments

Comments
 (0)