Skip to content

Commit fbf4ae0

Browse files
Ability to serialize not only gson
Change-Id: I620a39d93322b2bedd795d06d4dca6648f9ae545
1 parent 9c8a6ce commit fbf4ae0

28 files changed

Lines changed: 482 additions & 292 deletions

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ class YourMessage {
8181
public String error;
8282
}
8383

84-
final RxJsonWebSockets rxJsonWebSockets = new RxJsonWebSockets(new RxWebSockets(new NewWebSocket(), SERVER_URI), new GsonBuilder().create(), Message.class);
85-
rxJsonWebSockets.webSocketObservable()
86-
.compose(MoreObservables.filterAndMap(RxJsonEventMessage.class))
87-
.compose(RxJsonEventMessage.filterAndMap(YourMessage.class))
84+
final RxObjectWebSockets webSockets = new RxObjectWebSockets(new RxWebSockets(new NewWebSocket(), SERVER_URI), new GsonSerializer(new Gson(), Message.class));
85+
webSockets.webSocketObservable()
86+
.compose(MoreObservables.filterAndMap(RxObjectEventMessage.class))
87+
.compose(RxObjectEventMessage.filterAndMap(YourMessage.class))
8888
.subscribe(new Action1<YourMessage>() {
8989
@Override
9090
public void call(YourMessage yourMessage) {

websockets-rxjava-example/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ dependencies {
1919
compile 'io.reactivex:rxandroid:0.24.0'
2020
compile 'com.android.support:recyclerview-v7:21.0.0'
2121
compile 'com.google.guava:guava:18.0'
22+
compile "com.google.code.gson:gson:2.3"
2223
//compile "com.appunite:websockets:1.0"
2324

2425
testCompile "org.hamcrest:hamcrest-all:1.3"

websockets-rxjava-example/src/main/java/com/appunite/socket/MainActivity.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525

2626
import com.appunite.websocket.NewWebSocket;
2727
import com.appunite.websocket.rx.RxWebSockets;
28-
import com.appunite.websocket.rx.json.RxJsonWebSockets;
28+
import com.appunite.websocket.rx.object.GsonObjectSerializer;
29+
import com.appunite.websocket.rx.object.RxObjectWebSockets;
2930
import com.example.Socket;
3031
import com.example.SocketConnection;
3132
import com.example.SocketConnectionImpl;
@@ -163,7 +164,8 @@ public RetentionFragment() {
163164
ADDRESS,
164165
ImmutableList.of("chat"),
165166
ImmutableList.<Header>of());
166-
final RxJsonWebSockets jsonWebSockets = new RxJsonWebSockets(webSockets, gson, Message.class);
167+
final GsonObjectSerializer serializer = new GsonObjectSerializer(gson, Message.class);
168+
final RxObjectWebSockets jsonWebSockets = new RxObjectWebSockets(webSockets, serializer);
167169
final SocketConnection socketConnection = new SocketConnectionImpl(jsonWebSockets, Schedulers.io());
168170
presenter = new MainPresenter(new Socket(socketConnection, Schedulers.io()), Schedulers.io(), AndroidSchedulers.mainThread());
169171
}

websockets-rxjava-example/src/main/java/com/appunite/socket/MainPresenter.java

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919
import android.util.Pair;
2020

2121
import com.appunite.detector.SimpleDetector;
22-
import com.appunite.websocket.rx.json.messages.RxJsonEvent;
23-
import com.appunite.websocket.rx.json.messages.RxJsonEventConn;
24-
import com.appunite.websocket.rx.json.messages.RxJsonEventDisconnected;
25-
import com.appunite.websocket.rx.json.messages.RxJsonEventMessage;
26-
import com.appunite.websocket.rx.json.messages.RxJsonEventWrongMessageFormat;
22+
import com.appunite.websocket.rx.object.messages.RxObjectEvent;
23+
import com.appunite.websocket.rx.object.messages.RxObjectEventConn;
24+
import com.appunite.websocket.rx.object.messages.RxObjectEventDisconnected;
25+
import com.appunite.websocket.rx.object.messages.RxObjectEventMessage;
26+
import com.appunite.websocket.rx.object.messages.RxObjectEventWrongMessageFormat;
27+
import com.appunite.websocket.rx.object.messages.RxObjectEventWrongStringMessageFormat;
2728
import com.example.Socket;
2829
import com.example.model.DataMessage;
2930
import com.google.common.collect.ImmutableList;
@@ -117,9 +118,9 @@ public ImmutableList<AdapterItem> call(ImmutableList<AdapterItem> adapterItems,
117118
.subscribe(addItem);
118119

119120
connected = socket.connectedAndRegistered()
120-
.map(new Func1<RxJsonEventConn, Boolean>() {
121+
.map(new Func1<RxObjectEventConn, Boolean>() {
121122
@Override
122-
public Boolean call(RxJsonEventConn rxJsonEventConn) {
123+
public Boolean call(RxObjectEventConn rxJsonEventConn) {
123124
return rxJsonEventConn != null;
124125
}
125126
})
@@ -158,11 +159,11 @@ public String call(Boolean connected) {
158159
};
159160
}
160161

161-
private Observable.Operator<Pair<String, String>, RxJsonEvent> liftRxJsonEventToPairMessage() {
162-
return new Observable.Operator<Pair<String, String>, RxJsonEvent>() {
162+
private Observable.Operator<Pair<String, String>, RxObjectEvent> liftRxJsonEventToPairMessage() {
163+
return new Observable.Operator<Pair<String, String>, RxObjectEvent>() {
163164
@Override
164-
public Subscriber<? super RxJsonEvent> call(final Subscriber<? super Pair<String, String>> subscriber) {
165-
return new Subscriber<RxJsonEvent>(subscriber) {
165+
public Subscriber<? super RxObjectEvent> call(final Subscriber<? super Pair<String, String>> subscriber) {
166+
return new Subscriber<RxObjectEvent>(subscriber) {
166167
@Override
167168
public void onCompleted() {
168169
subscriber.onCompleted();
@@ -174,17 +175,17 @@ public void onError(Throwable e) {
174175
}
175176

176177
@Override
177-
public void onNext(RxJsonEvent rxJsonEvent) {
178-
if (rxJsonEvent instanceof RxJsonEventMessage) {
179-
subscriber.onNext(new Pair<>("message", ((RxJsonEventMessage) rxJsonEvent).message().toString()));
180-
} else if (rxJsonEvent instanceof RxJsonEventWrongMessageFormat) {
181-
final RxJsonEventWrongMessageFormat wrongMessageFormat = (RxJsonEventWrongMessageFormat) rxJsonEvent;
178+
public void onNext(RxObjectEvent rxObjectEvent) {
179+
if (rxObjectEvent instanceof RxObjectEventMessage) {
180+
subscriber.onNext(new Pair<>("message", ((RxObjectEventMessage) rxObjectEvent).message().toString()));
181+
} else if (rxObjectEvent instanceof RxObjectEventWrongMessageFormat) {
182+
final RxObjectEventWrongStringMessageFormat wrongMessageFormat = (RxObjectEventWrongStringMessageFormat) rxObjectEvent;
182183
//noinspection ThrowableResultOfMethodCallIgnored
183184
subscriber.onNext(new Pair<>("could not parse message", wrongMessageFormat.message()
184185
+ ", " + wrongMessageFormat.exception().toString()));
185-
} else if (rxJsonEvent instanceof RxJsonEventDisconnected) {
186+
} else if (rxObjectEvent instanceof RxObjectEventDisconnected) {
186187
//noinspection ThrowableResultOfMethodCallIgnored
187-
final Exception exception = ((RxJsonEventDisconnected) rxJsonEvent).exception();
188+
final Exception exception = ((RxObjectEventDisconnected) rxObjectEvent).exception();
188189
if (!(exception instanceof InterruptedException)) {
189190
subscriber.onNext(new Pair<>("error", exception.toString()));
190191
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.appunite.websocket.rx.object;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.JsonParseException;
5+
6+
import java.lang.reflect.Type;
7+
8+
import javax.annotation.Nonnull;
9+
10+
public class GsonObjectSerializer implements ObjectSerializer {
11+
12+
@Nonnull
13+
private final Gson gson;
14+
@Nonnull
15+
private final Type typeOfT;
16+
17+
public GsonObjectSerializer(@Nonnull Gson gson, @Nonnull Type typeOfT) {
18+
this.gson = gson;
19+
this.typeOfT = typeOfT;
20+
}
21+
22+
@Nonnull
23+
@Override
24+
public Object serialize(@Nonnull String message) throws ObjectParseException {
25+
try {
26+
return gson.fromJson(message, typeOfT);
27+
} catch (JsonParseException e) {
28+
throw new ObjectParseException("Could not parse", e);
29+
}
30+
}
31+
32+
@Nonnull
33+
@Override
34+
public Object serialize(@Nonnull byte[] message) throws ObjectParseException {
35+
throw new ObjectParseException("Could not parse binary messages");
36+
}
37+
38+
@Nonnull
39+
@Override
40+
public byte[] deserializeBinary(@Nonnull Object message) throws ObjectParseException {
41+
throw new IllegalStateException("Only serialization to string is available");
42+
}
43+
44+
@Nonnull
45+
@Override
46+
public String deserializeString(@Nonnull Object message) throws ObjectParseException {
47+
try {
48+
return gson.toJson(message);
49+
} catch (JsonParseException e) {
50+
throw new ObjectParseException("Could not parse", e);
51+
}
52+
}
53+
54+
@Override
55+
public boolean isBinary(@Nonnull Object message) {
56+
return false;
57+
}
58+
}

websockets-rxjava-example/src/main/java/com/example/MoreObservables.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.example;
1818

19-
import com.appunite.websocket.rx.json.messages.RxJsonEvent;
19+
import com.appunite.websocket.rx.object.messages.RxObjectEvent;
2020

2121
import javax.annotation.Nonnull;
2222

@@ -26,7 +26,6 @@
2626
import rx.functions.Func1;
2727
import rx.internal.operators.OperatorMulticast;
2828
import rx.subjects.BehaviorSubject;
29-
import rx.subjects.PublishSubject;
3029
import rx.subjects.Subject;
3130

3231
public class MoreObservables {
@@ -81,11 +80,11 @@ public Object call(Throwable throwable) {
8180
};
8281
}
8382

84-
public static Observable.Operator<Object, RxJsonEvent> ignoreNext() {
85-
return new Observable.Operator<Object, RxJsonEvent>() {
83+
public static Observable.Operator<Object, RxObjectEvent> ignoreNext() {
84+
return new Observable.Operator<Object, RxObjectEvent>() {
8685
@Override
87-
public Subscriber<? super RxJsonEvent> call(final Subscriber<? super Object> subscriber) {
88-
return new Subscriber<RxJsonEvent>(subscriber) {
86+
public Subscriber<? super RxObjectEvent> call(final Subscriber<? super Object> subscriber) {
87+
return new Subscriber<RxObjectEvent>(subscriber) {
8988
@Override
9089
public void onCompleted() {
9190
subscriber.onCompleted();
@@ -97,7 +96,7 @@ public void onError(Throwable e) {
9796
}
9897

9998
@Override
100-
public void onNext(RxJsonEvent rxJsonEvent) {}
99+
public void onNext(RxObjectEvent rxObjectEvent) {}
101100
};
102101
}
103102
};

0 commit comments

Comments
 (0)