Skip to content

Commit 3191eb4

Browse files
committed
Merge pull request #6 from Gitteroid/dev
Added room events streaming API.
2 parents 74e830c + d8cdb0e commit 3191eb4

File tree

7 files changed

+139
-22
lines changed

7 files changed

+139
-22
lines changed

README.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ repositories {
3434
}
3535
3636
dependencies {
37-
compile 'com.github.amatkivskiy:gitter.sdk.rx:1.4'
37+
compile 'com.github.amatkivskiy:gitter.sdk.rx:1.5'
3838
}
3939
```
4040

@@ -63,6 +63,7 @@ dependencies {
6363
###<a name="ReleaseNotes">**Release notes**
6464
- **1.5** (14.01.2016)
6565
- Added faye api support.
66+
- Added room events streaming api support.
6667
- **1.4**
6768
- Refactored library structure
6869
- Added async api support.
@@ -107,6 +108,7 @@ dependencies {
107108

108109
*:heavy_exclamation_mark: Streaming (Avalible only in Rx part.*)
109110
- Room messages stream
111+
- Room events stream
110112

111113
*:heavy_exclamation_mark: Faye API (Avalible only in Async part.*)
112114
- Room messages events
@@ -324,6 +326,24 @@ client.getRoomMessagesStream(roomId).subscribe(new Action1<MessageResponse>() {
324326
});
325327
```
326328

329+
or
330+
331+
```java
332+
RxGitterStreamingApiClient client = new RxGitterStreamingApiClient.Builder()
333+
.withAccountToken("user_access_token")
334+
.build();
335+
336+
String roomId = "room_id";
337+
338+
client.getRoomEventsStream(roomId).subscribe(new Action1<RoomEvent>() {
339+
@Override
340+
public void call(RoomEvent event) {
341+
System.out.println(event.sent);
342+
System.out.println(event.meta);
343+
}
344+
});
345+
```
346+
327347
###<a name="Faye">**How to work with Gitter Faye API**
328348

329349
1 Setup ```AsyncGitterFayeClient```:

library/rx/src/main/java/com/amatkivskiy/gitter/sdk/rx/api/RxGitterStreamingApi.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,9 @@ public interface RxGitterStreamingApi {
1010

1111
@Streaming
1212
@GET("/rooms/{roomId}/chatMessages")
13-
Observable<Response> getRoomStream(@Path("roomId") String roomId);
13+
Observable<Response> getRoomMessagesStream(@Path("roomId") String roomId);
14+
15+
@Streaming
16+
@GET("/rooms/{roomId}/events")
17+
Observable<Response> getRoomEventsStream(@Path("roomId") String roomId);
1418
}

library/rx/src/main/java/com/amatkivskiy/gitter/sdk/rx/client/RxGitterStreamingApiClient.java

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
package com.amatkivskiy.gitter.sdk.rx.client;
22

3+
import com.google.gson.Gson;
4+
import com.google.gson.GsonBuilder;
5+
36
import com.amatkivskiy.gitter.sdk.Constants;
7+
import com.amatkivskiy.gitter.sdk.api.builder.GitterApiBuilder;
48
import com.amatkivskiy.gitter.sdk.converter.UserJsonDeserializer;
59
import com.amatkivskiy.gitter.sdk.model.response.UserResponse;
610
import com.amatkivskiy.gitter.sdk.model.response.message.MessageResponse;
711
import com.amatkivskiy.gitter.sdk.rx.api.RxGitterStreamingApi;
812
import com.amatkivskiy.gitter.sdk.rx.streaming.OnSubscribeBufferedReader;
9-
import com.amatkivskiy.gitter.sdk.api.builder.GitterApiBuilder;
13+
import com.amatkivskiy.gitter.sdk.rx.streaming.model.RoomEvent;
1014
import com.amatkivskiy.gitter.sdk.util.StringUtils;
11-
import com.google.gson.Gson;
12-
import com.google.gson.GsonBuilder;
13-
import retrofit.client.Response;
14-
import retrofit.converter.GsonConverter;
15-
import rx.Observable;
16-
import rx.functions.Func1;
1715

1816
import java.io.BufferedReader;
1917
import java.io.IOException;
2018
import java.io.InputStreamReader;
2119

20+
import retrofit.client.Response;
21+
import retrofit.converter.GsonConverter;
22+
import rx.Observable;
23+
import rx.functions.Func1;
24+
2225
public class RxGitterStreamingApiClient {
2326
private RxGitterStreamingApi api;
2427
private Gson gson;
@@ -29,7 +32,7 @@ public RxGitterStreamingApiClient(RxGitterStreamingApi api, Gson gson) {
2932
}
3033

3134
public Observable<MessageResponse> getRoomMessagesStream(String roomId) {
32-
return api.getRoomStream(roomId).flatMap(new Func1<Response, Observable<String>>() {
35+
return api.getRoomMessagesStream(roomId).flatMap(new Func1<Response, Observable<String>>() {
3336
@Override
3437
public Observable<String> call(Response response) {
3538
try {
@@ -53,6 +56,31 @@ public MessageResponse call(String s) {
5356
});
5457
}
5558

59+
public Observable<RoomEvent> getRoomEventsStream(String roomId) {
60+
return api.getRoomEventsStream(roomId).flatMap(new Func1<Response, Observable<String>>() {
61+
@Override
62+
public Observable<String> call(Response response) {
63+
try {
64+
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getBody().in()));
65+
return Observable.create(new OnSubscribeBufferedReader(bufferedReader));
66+
} catch (IOException e) {
67+
return Observable.error(e);
68+
}
69+
}
70+
}).filter(new Func1<String, Boolean>() {
71+
@Override
72+
public Boolean call(String s) {
73+
// This check is required because server sometimes return empty string or string with newline character.
74+
return StringUtils.checkIfValidMessageJson(s);
75+
}
76+
}).map(new Func1<String, RoomEvent>() {
77+
@Override
78+
public RoomEvent call(String s) {
79+
return gson.fromJson(s, RoomEvent.class);
80+
}
81+
});
82+
}
83+
5684
public static class Builder extends GitterApiBuilder<Builder, RxGitterStreamingApiClient> {
5785

5886
protected String getFullEndpointUrl() {

library/rx/src/main/java/com/amatkivskiy/gitter/sdk/rx/streaming/OnSubscribeBufferedReader.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.amatkivskiy.gitter.sdk.rx.streaming;
22

3-
import rx.Subscriber;
4-
import rx.observables.AbstractOnSubscribe;
5-
63
import java.io.BufferedReader;
74
import java.io.IOException;
85

6+
import rx.Subscriber;
7+
import rx.observables.AbstractOnSubscribe;
8+
99
public class OnSubscribeBufferedReader extends AbstractOnSubscribe<String, BufferedReader> {
1010

1111
private final BufferedReader reader;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.amatkivskiy.gitter.sdk.rx.streaming.model;
2+
3+
import com.google.gson.JsonObject;
4+
5+
import com.amatkivskiy.gitter.sdk.model.response.UserResponse;
6+
7+
public class RoomEvent {
8+
public final String id;
9+
public final String text;
10+
public final String html;
11+
public final String sent;
12+
public final String editedAt;
13+
public final UserResponse fromUser;
14+
15+
public final JsonObject meta;
16+
public final JsonObject payload;
17+
18+
public final String v;
19+
20+
public RoomEvent(String id, String text, String html, String sent, String editedAt, UserResponse fromUser, JsonObject meta, JsonObject payload, String v) {
21+
this.id = id;
22+
this.text = text;
23+
this.html = html;
24+
this.sent = sent;
25+
this.editedAt = editedAt;
26+
this.fromUser = fromUser;
27+
this.meta = meta;
28+
this.payload = payload;
29+
this.v = v;
30+
}
31+
}

samples/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apply plugin: 'application'
22

3-
mainClassName = "com.amatkivskiy.gitter.sdk.samples.faye.FayeSamples"
4-
//mainClassName = "com.amatkivskiy.gitter.sdk.samples.RxSamples"
3+
//mainClassName = "com.amatkivskiy.gitter.sdk.samples.faye.FayeSamples"
4+
mainClassName = "com.amatkivskiy.gitter.sdk.samples.RxSamples"
55

66
dependencies {
77
// compile project(':library:core')

samples/src/main/java/com/amatkivskiy/gitter/sdk/samples/RxSamples.java

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
11
package com.amatkivskiy.gitter.sdk.samples;
22

3-
import com.amatkivskiy.gitter.sdk.credentials.GitterDeveloperCredentials;
4-
import com.amatkivskiy.gitter.sdk.model.response.BooleanResponse;
5-
import com.amatkivskiy.gitter.sdk.model.response.UserResponse;
6-
import com.amatkivskiy.gitter.sdk.model.response.room.RoomResponse;
73
import com.amatkivskiy.gitter.sdk.GitterOauthUtils;
4+
import com.amatkivskiy.gitter.sdk.credentials.GitterDeveloperCredentials;
85
import com.amatkivskiy.gitter.sdk.credentials.SimpleGitterCredentialsProvider;
96
import com.amatkivskiy.gitter.sdk.model.request.ChatMessagesRequestParams;
107
import com.amatkivskiy.gitter.sdk.model.request.UserAccountType;
118
import com.amatkivskiy.gitter.sdk.model.response.AccessTokenResponse;
9+
import com.amatkivskiy.gitter.sdk.model.response.BooleanResponse;
10+
import com.amatkivskiy.gitter.sdk.model.response.UserResponse;
1211
import com.amatkivskiy.gitter.sdk.model.response.message.MessageResponse;
12+
import com.amatkivskiy.gitter.sdk.model.response.room.RoomResponse;
1313
import com.amatkivskiy.gitter.sdk.rx.client.RxGitterApiClient;
1414
import com.amatkivskiy.gitter.sdk.rx.client.RxGitterAuthenticationClient;
1515
import com.amatkivskiy.gitter.sdk.rx.client.RxGitterStreamingApiClient;
16-
import retrofit.RestAdapter;
17-
import rx.Observable;
18-
import rx.functions.Action1;
16+
import com.amatkivskiy.gitter.sdk.rx.streaming.model.RoomEvent;
17+
import com.squareup.okhttp.OkHttpClient;
1918

2019
import java.util.ArrayList;
2120
import java.util.List;
21+
import java.util.concurrent.TimeUnit;
22+
23+
import retrofit.RestAdapter;
24+
import retrofit.client.OkClient;
25+
import rx.Observable;
26+
import rx.functions.Action1;
2227

2328
public class RxSamples {
2429
// This information you can take from your Gitter dev account:
@@ -41,6 +46,29 @@ public static void main(String[] args) {
4146
searchUsersSample();
4247
markMessagesRead();
4348
getSuggestedRooms();
49+
roomEventsStreamSample();
50+
}
51+
52+
private static void roomEventsStreamSample() {
53+
OkHttpClient okClient = new OkHttpClient();
54+
55+
// Configure OkHttpClient not to drop connection rapidly.
56+
okClient.setReadTimeout(10, TimeUnit.MINUTES);
57+
58+
RxGitterStreamingApiClient client = new RxGitterStreamingApiClient.Builder()
59+
.withAccountToken("user_access_token")
60+
.withClient(new OkClient(okClient))
61+
.build();
62+
63+
String roomId = "533aa1485e986b0712f00ba5"; // gitterHQ/developers for example.
64+
65+
client.getRoomEventsStream(roomId).subscribe(new Action1<RoomEvent>() {
66+
@Override
67+
public void call(RoomEvent event) {
68+
System.out.println(event.sent);
69+
System.out.println(event.meta);
70+
}
71+
});
4472
}
4573

4674
private static void getSuggestedRooms() {
@@ -120,8 +148,14 @@ public void call(BooleanResponse response) {
120148
}
121149

122150
private static void roomMessagesStreamSample() {
151+
OkHttpClient okClient = new OkHttpClient();
152+
153+
// Configure OkHttpClient not to drop connection rapidly.
154+
okClient.setReadTimeout(10, TimeUnit.MINUTES);
155+
123156
RxGitterStreamingApiClient client = new RxGitterStreamingApiClient.Builder()
124157
.withAccountToken("user_access_token")
158+
.withClient(new OkClient(okClient))
125159
.build();
126160

127161
String roomId = "533aa1485e986b0712f00ba5"; // gitterHQ/developers for example.

0 commit comments

Comments
 (0)