Skip to content

Commit 8780db3

Browse files
authored
Merge pull request #54 from hardyeats/rxjava2
Issue #48 : Convert from RxJava 1 to RxJava 2.
2 parents d2cac6d + d945182 commit 8780db3

File tree

9 files changed

+146
-153
lines changed

9 files changed

+146
-153
lines changed

example-client/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ dependencies {
3131
compile 'com.android.support:appcompat-v7:25.2.0'
3232
compile 'org.java-websocket:java-websocket:1.3.2'
3333
compile 'com.android.support:recyclerview-v7:25.2.0'
34-
compile 'io.reactivex:rxandroid:1.2.1'
35-
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
36-
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
37-
compile 'com.squareup.retrofit2:retrofit:2.1.0'
34+
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
35+
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
36+
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
37+
compile 'com.squareup.retrofit2:retrofit:2.3.0'
3838
compile project(':lib')
3939
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package ua.naiksoftware.stompclientexample;
22

3+
import io.reactivex.Flowable;
34
import retrofit2.http.POST;
45
import retrofit2.http.Query;
5-
import rx.Observable;
66

77
/**
88
* Created by Naik on 24.02.17.
99
*/
1010
public interface ExampleRepository {
1111

1212
@POST("hello-convert-and-send")
13-
Observable<Void> sendRestEcho(@Query("msg") String message);
13+
Flowable<Void> sendRestEcho(@Query("msg") String message);
1414
}

example-client/src/main/java/ua/naiksoftware/stompclientexample/MainActivity.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package ua.naiksoftware.stompclientexample;
22

3-
import android.support.v7.app.AppCompatActivity;
43
import android.os.Bundle;
4+
import android.support.v7.app.AppCompatActivity;
55
import android.support.v7.widget.LinearLayoutManager;
66
import android.support.v7.widget.RecyclerView;
77
import android.util.Log;
@@ -19,10 +19,10 @@
1919
import java.util.List;
2020
import java.util.Locale;
2121

22-
import rx.Observable;
23-
import rx.Subscription;
24-
import rx.android.schedulers.AndroidSchedulers;
25-
import rx.schedulers.Schedulers;
22+
import io.reactivex.FlowableTransformer;
23+
import io.reactivex.android.schedulers.AndroidSchedulers;
24+
import io.reactivex.disposables.Disposable;
25+
import io.reactivex.schedulers.Schedulers;
2626
import ua.naiksoftware.stomp.Stomp;
2727
import ua.naiksoftware.stomp.client.StompClient;
2828

@@ -35,7 +35,7 @@ public class MainActivity extends AppCompatActivity {
3535
private SimpleAdapter mAdapter;
3636
private List<String> mDataSet = new ArrayList<>();
3737
private StompClient mStompClient;
38-
private Subscription mRestPingSubscription;
38+
private Disposable mRestPingDisposable;
3939
private final SimpleDateFormat mTimeFormat = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
4040
private RecyclerView mRecyclerView;
4141
private Gson mGson = new GsonBuilder().create();
@@ -100,7 +100,7 @@ public void sendEchoViaStomp(View v) {
100100
}
101101

102102
public void sendEchoViaRest(View v) {
103-
mRestPingSubscription = RestClient.getInstance().getExampleRepository()
103+
mRestPingDisposable = RestClient.getInstance().getExampleRepository()
104104
.sendRestEcho("Echo REST " + mTimeFormat.format(new Date()))
105105
.compose(applySchedulers())
106106
.subscribe(aVoid -> {
@@ -122,8 +122,8 @@ private void toast(String text) {
122122
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
123123
}
124124

125-
protected <T> Observable.Transformer<T, T> applySchedulers() {
126-
return rObservable -> rObservable
125+
protected <T> FlowableTransformer<T, T> applySchedulers() {
126+
return tFlowable -> tFlowable
127127
.unsubscribeOn(Schedulers.newThread())
128128
.subscribeOn(Schedulers.io())
129129
.observeOn(AndroidSchedulers.mainThread());
@@ -132,7 +132,7 @@ protected <T> Observable.Transformer<T, T> applySchedulers() {
132132
@Override
133133
protected void onDestroy() {
134134
mStompClient.disconnect();
135-
if (mRestPingSubscription != null) mRestPingSubscription.unsubscribe();
135+
if (mRestPingDisposable != null) mRestPingDisposable.dispose();
136136
super.onDestroy();
137137
}
138138
}

example-client/src/main/java/ua/naiksoftware/stompclientexample/RestClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package ua.naiksoftware.stompclientexample;
22

33
import retrofit2.Retrofit;
4-
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
4+
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
55
import retrofit2.converter.gson.GsonConverterFactory;
66

77
/**
@@ -33,7 +33,7 @@ public static RestClient getInstance() {
3333
private RestClient() {
3434
Retrofit retrofit = new Retrofit.Builder().baseUrl("http://" + ANDROID_EMULATOR_LOCALHOST + ":" + SERVER_PORT + "/")
3535
.addConverterFactory(GsonConverterFactory.create())
36-
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
36+
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
3737
.build();
3838
mExampleRepository = retrofit.create(ExampleRepository.class);
3939
}

lib/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ android {
3232
dependencies {
3333
compile fileTree(include: ['*.jar'], dir: 'libs')
3434
testCompile 'junit:junit:4.12'
35-
compile 'io.reactivex:rxjava:1.2.0'
35+
compile "io.reactivex.rxjava2:rxjava:2.1.2"
3636
// Supported transports
3737
provided "org.java-websocket:java-websocket:1.3.2"
3838
provided 'com.squareup.okhttp3:okhttp:3.8.0'
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ua.naiksoftware.stomp;
22

3-
import rx.Observable;
3+
import io.reactivex.Flowable;
44

55
/**
66
* Created by naik on 05.05.16.
@@ -10,17 +10,17 @@ public interface ConnectionProvider {
1010
/**
1111
* Subscribe this for receive stomp messages
1212
*/
13-
Observable<String> messages();
13+
Flowable<String> messages();
1414

1515
/**
1616
* Sending stomp messages via you ConnectionProvider.
1717
* onError if not connected or error detected will be called, or onCompleted id sending started
1818
* TODO: send messages with ACK
1919
*/
20-
Observable<Void> send(String stompMessage);
20+
Flowable<Void> send(String stompMessage);
2121

2222
/**
2323
* Subscribe this for receive #LifecycleEvent events
2424
*/
25-
Observable<LifecycleEvent> getLifecycleReceiver();
25+
Flowable<LifecycleEvent> getLifecycleReceiver();
2626
}

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

Lines changed: 35 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@
99
import java.util.Map;
1010
import java.util.TreeMap;
1111

12+
import io.reactivex.BackpressureStrategy;
13+
import io.reactivex.Flowable;
14+
import io.reactivex.FlowableEmitter;
1215
import okhttp3.Headers;
1316
import okhttp3.OkHttpClient;
1417
import okhttp3.Request;
1518
import okhttp3.Response;
1619
import okhttp3.WebSocket;
1720
import okhttp3.WebSocketListener;
1821
import okio.ByteString;
19-
import rx.Observable;
20-
import rx.Subscriber;
2122

2223
/* package */ class OkHttpConnectionProvider implements ConnectionProvider {
2324

@@ -27,40 +28,37 @@
2728
private final Map<String, String> mConnectHttpHeaders;
2829
private final OkHttpClient mOkHttpClient;
2930

30-
private final List<Subscriber<? super LifecycleEvent>> mLifecycleSubscribers;
31-
private final List<Subscriber<? super String>> mMessagesSubscribers;
31+
private final List<FlowableEmitter<? super LifecycleEvent>> mLifecycleEmitters;
32+
private final List<FlowableEmitter<? super String>> mMessagesEmitters;
3233

3334
private WebSocket openedSocked;
3435

3536

3637
/* package */ OkHttpConnectionProvider(String uri, Map<String, String> connectHttpHeaders, OkHttpClient okHttpClient) {
3738
mUri = uri;
3839
mConnectHttpHeaders = connectHttpHeaders != null ? connectHttpHeaders : new HashMap<>();
39-
mLifecycleSubscribers = new ArrayList<>();
40-
mMessagesSubscribers = new ArrayList<>();
40+
mLifecycleEmitters = new ArrayList<>();
41+
mMessagesEmitters = new ArrayList<>();
4142
mOkHttpClient = okHttpClient;
4243
}
4344

4445
@Override
45-
public Observable<String> messages() {
46-
Observable<String> observable = Observable.<String>create(subscriber -> {
47-
mMessagesSubscribers.add(subscriber);
48-
49-
}).doOnUnsubscribe(() -> {
50-
Iterator<Subscriber<? super String>> iterator = mMessagesSubscribers.iterator();
51-
while (iterator.hasNext()) {
52-
if (iterator.next().isUnsubscribed()) iterator.remove();
53-
}
54-
55-
if (mMessagesSubscribers.size() < 1) {
56-
Log.d(TAG, "Close web socket connection now in thread " + Thread.currentThread());
57-
openedSocked.close(1000, "");
58-
openedSocked = null;
59-
}
60-
});
46+
public Flowable<String> messages() {
47+
Flowable<String> flowable = Flowable.<String>create(mMessagesEmitters::add, BackpressureStrategy.BUFFER)
48+
.doOnCancel(() -> {
49+
Iterator<FlowableEmitter<? super String>> iterator = mMessagesEmitters.iterator();
50+
while (iterator.hasNext()) {
51+
if (iterator.next().isCancelled()) iterator.remove();
52+
}
6153

54+
if (mMessagesEmitters.size() < 1) {
55+
Log.d(TAG, "Close web socket connection now in thread " + Thread.currentThread());
56+
openedSocked.close(1000, "");
57+
openedSocked = null;
58+
}
59+
});
6260
createWebSocketConnection();
63-
return observable;
61+
return flowable;
6462
}
6563

6664
private void createWebSocketConnection() {
@@ -112,29 +110,27 @@ public void onFailure(WebSocket webSocket, Throwable t, Response response) {
112110
}
113111

114112
@Override
115-
public Observable<Void> send(String stompMessage) {
116-
return Observable.create(subscriber -> {
113+
public Flowable<Void> send(String stompMessage) {
114+
return Flowable.create(subscriber -> {
117115
if (openedSocked == null) {
118116
subscriber.onError(new IllegalStateException("Not connected yet"));
119117
} else {
120118
Log.d(TAG, "Send STOMP message: " + stompMessage);
121119
openedSocked.send(stompMessage);
122-
subscriber.onCompleted();
120+
subscriber.onComplete();
123121
}
124-
});
122+
}, BackpressureStrategy.BUFFER);
125123
}
126124

127125
@Override
128-
public Observable<LifecycleEvent> getLifecycleReceiver() {
129-
return Observable.<LifecycleEvent>create(subscriber -> {
130-
mLifecycleSubscribers.add(subscriber);
131-
132-
}).doOnUnsubscribe(() -> {
133-
Iterator<Subscriber<? super LifecycleEvent>> iterator = mLifecycleSubscribers.iterator();
134-
while (iterator.hasNext()) {
135-
if (iterator.next().isUnsubscribed()) iterator.remove();
136-
}
137-
});
126+
public Flowable<LifecycleEvent> getLifecycleReceiver() {
127+
return Flowable.<LifecycleEvent>create(mLifecycleEmitters::add, BackpressureStrategy.BUFFER)
128+
.doOnCancel(() -> {
129+
Iterator<FlowableEmitter<? super LifecycleEvent>> iterator = mLifecycleEmitters.iterator();
130+
while (iterator.hasNext()) {
131+
if (iterator.next().isCancelled()) iterator.remove();
132+
}
133+
});
138134
}
139135

140136
private TreeMap<String, String> headersAsMap(Response response) {
@@ -154,14 +150,14 @@ private void addConnectionHeadersToBuilder(Request.Builder requestBuilder, Map<S
154150

155151
private void emitLifecycleEvent(LifecycleEvent lifecycleEvent) {
156152
Log.d(TAG, "Emit lifecycle event: " + lifecycleEvent.getType().name());
157-
for (Subscriber<? super LifecycleEvent> subscriber : mLifecycleSubscribers) {
153+
for (FlowableEmitter<? super LifecycleEvent> subscriber : mLifecycleEmitters) {
158154
subscriber.onNext(lifecycleEvent);
159155
}
160156
}
161157

162158
private void emitMessage(String stompMessage) {
163159
Log.d(TAG, "Emit STOMP message: " + stompMessage);
164-
for (Subscriber<? super String> subscriber : mMessagesSubscribers) {
160+
for (FlowableEmitter<? super String> subscriber : mMessagesEmitters) {
165161
subscriber.onNext(stompMessage);
166162
}
167163
}

0 commit comments

Comments
 (0)