Skip to content

Commit 9dfa981

Browse files
Merge branch 'fix-server-close-request' into 'master'
Fixed behavior when server requested close Close request from server mean that socket is closed so no new message from server arrive and none message can be send. So we need to propagate disconnect event in that case. In this commit also some javadoc was fixed See merge request !2
2 parents 1efae6f + c24daa8 commit 9dfa981

12 files changed

Lines changed: 64 additions & 38 deletions

websockets-rxjava/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ signing {
4646
}
4747
group = "com.appunite"
4848
archivesBaseName = "websockets-rxjava"
49-
version = "3.0.0"
49+
version = "3.0.1"
5050

5151
if (!project.hasProperty("ossrhUsername")) {
5252
project.ext.setProperty("ossrhUsername", null)

websockets-rxjava/src/main/java/com/appunite/websocket/rx/RxWebSockets.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.appunite.websocket.rx.messages.RxEventConnected;
2323
import com.appunite.websocket.rx.messages.RxEventDisconnected;
2424
import com.appunite.websocket.rx.messages.RxEventPong;
25-
import com.appunite.websocket.rx.messages.RxEventServerRequestedClose;
2625
import com.appunite.websocket.rx.messages.RxEventStringMessage;
2726
import com.squareup.okhttp.OkHttpClient;
2827
import com.squareup.okhttp.Request;
@@ -110,6 +109,10 @@ WebSocket webSocketOrNull() {
110109

111110
@Override
112111
public void onFailure(IOException e, Response response) {
112+
returnException(e);
113+
}
114+
115+
private void returnException(IOException e) {
113116
subscriber.onNext(new RxEventDisconnected(e));
114117
subscriber.onError(e);
115118
synchronized (lock) {
@@ -146,14 +149,7 @@ public void onMessage(BufferedSource payload, WebSocket.PayloadType type) throws
146149

147150
@Override
148151
public void onClose(int code, String reason) {
149-
final WebSocket sender = webSocketOrNull();
150-
if (sender != null) {
151-
subscriber.onNext(new RxEventServerRequestedClose(sender, code, reason));
152-
}
153-
synchronized (lock) {
154-
webSocketItem = null;
155-
requestClose = false;
156-
}
152+
returnException(new ServerRequestedCloseException(code, reason));
157153
}
158154

159155
};

websockets-rxjava/src/main/java/com/appunite/websocket/rx/messages/RxEventServerRequestedClose.java renamed to websockets-rxjava/src/main/java/com/appunite/websocket/rx/ServerRequestedCloseException.java

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,43 @@
1414
* limitations under the License
1515
*/
1616

17-
package com.appunite.websocket.rx.messages;
17+
package com.appunite.websocket.rx;
1818

19-
import com.squareup.okhttp.ws.WebSocket;
19+
import java.io.IOException;
2020

2121
import javax.annotation.Nonnull;
2222

2323
/**
24-
* Event indicating that server requested close connection
24+
* Exception indicating that server requested close connection
2525
*/
26-
public class RxEventServerRequestedClose extends RxEventConn {
26+
public class ServerRequestedCloseException extends IOException {
2727

2828
private final int code;
2929
@Nonnull
3030
private final String reason;
3131

32-
public RxEventServerRequestedClose(@Nonnull WebSocket sender,
33-
int code,
34-
@Nonnull String reason) {
35-
super(sender);
32+
public ServerRequestedCloseException(int code,
33+
@Nonnull String reason) {
34+
super("Server requested connection to close, code=" + code + ", reason= " + reason);
3635
this.code = code;
3736
this.reason = reason;
3837
}
3938

40-
@Override
41-
public String toString() {
42-
return "RxEventServerRequestedClose{" +
43-
"code=" + code +
44-
", reason='" + reason + '\'' +
45-
'}';
39+
/**
40+
* Code why close requested
41+
* @return code why close requested
42+
*/
43+
public int code() {
44+
return code;
4645
}
46+
47+
/**
48+
* Reason why close requested
49+
* @return reason why close requested or empty string
50+
*/
51+
@Nonnull
52+
public String reason() {
53+
return reason;
54+
}
55+
4756
}

websockets-rxjava/src/main/java/com/appunite/websocket/rx/messages/RxEvent.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@
2323
* @see RxEventDisconnected
2424
* @see RxEventBinaryMessage
2525
* @see RxEventStringMessage
26-
* @see RxEventPing
2726
* @see RxEventPong
28-
* @see RxEventServerRequestedClose
29-
* @see RxEventUnknownMessage
3027
*/
3128
public abstract class RxEvent {
3229

websockets-rxjava/src/main/java/com/appunite/websocket/rx/messages/RxEventBinaryMessageAbs.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@
2424
* Abstract class for binary messages returned by server
2525
*
2626
* @see RxEventBinaryMessage
27-
* @see RxEventPing
2827
* @see RxEventPong
29-
* @see RxEventUnknownMessage
30-
* @see RxEventServerRequestedClose
3128
*/
3229
public abstract class RxEventBinaryMessageAbs extends RxEventConn {
3330

websockets-rxjava/src/main/java/com/appunite/websocket/rx/messages/RxEventDisconnected.java

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

1717
package com.appunite.websocket.rx.messages;
1818

19+
import java.io.IOException;
20+
1921
import javax.annotation.Nonnull;
2022

2123
/**
@@ -27,20 +29,21 @@
2729
public class RxEventDisconnected extends RxEvent {
2830

2931
@Nonnull
30-
private Exception exception;
32+
private IOException exception;
3133

32-
public RxEventDisconnected(@Nonnull Exception exception) {
34+
public RxEventDisconnected(@Nonnull IOException exception) {
3335
super();
3436
this.exception = exception;
3537
}
3638

3739
/**
3840
* Exception that caused disconnection.
41+
* If server requested disconnection it will be {@link com.appunite.websocket.rx.ServerRequestedCloseException}
3942
*
4043
* @return exception that caused disconnection
4144
*/
4245
@Nonnull
43-
public Exception exception() {
46+
public IOException exception() {
4447
return exception;
4548
}
4649

websockets-rxjava/src/main/java/com/appunite/websocket/rx/object/RxObjectWebSockets.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ public void onNext(RxEvent rxEvent) {
9393
} else if (rxEvent instanceof RxEventBinaryMessage) {
9494
final RxEventBinaryMessage binaryMessage = (RxEventBinaryMessage) rxEvent;
9595
subscriber.onNext(parseMessage(binaryMessage));
96+
} else {
97+
throw new RuntimeException("Unknown message type");
9698
}
9799
}
98100

websockets-rxjava/src/main/java/com/appunite/websocket/rx/object/messages/RxObjectEventDisconnected.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,23 @@
1919
import com.appunite.websocket.rx.object.ObjectWebSocketSender;
2020
import com.appunite.websocket.rx.messages.RxEventDisconnected;
2121

22+
import java.io.IOException;
23+
2224
import javax.annotation.Nonnull;
2325

2426
/**
2527
* Event indicate that client was disconnected to the server
2628
*
2729
* since then all execution on previosly returned {@link ObjectWebSocketSender} will cause throwing
28-
* {@link com.appunite.websocket.NotConnectedException}
30+
* {@link java.io.IOException}
2931
*
3032
* See: {@link RxEventDisconnected}
3133
*/
3234
public class RxObjectEventDisconnected extends RxObjectEvent {
3335
@Nonnull
34-
private final Exception exception;
36+
private final IOException exception;
3537

36-
public RxObjectEventDisconnected(@Nonnull Exception exception) {
38+
public RxObjectEventDisconnected(@Nonnull IOException exception) {
3739
super();
3840
this.exception = exception;
3941
}
@@ -42,7 +44,7 @@ public RxObjectEventDisconnected(@Nonnull Exception exception) {
4244
* See: {@link RxEventDisconnected#exception()}
4345
*/
4446
@Nonnull
45-
public Exception exception() {
47+
public IOException exception() {
4648
return exception;
4749
}
4850

websockets-rxjava/src/main/java/com/appunite/websocket/rx/object/messages/RxObjectEventMessage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import rx.functions.Func1;
2727

2828
/**
29-
* Event indicating that json was returned by server and was parsed
29+
* Event indicating that data returned by server was parsed
3030
*
3131
* If {@link ObjectParseException} occur than {@link RxObjectEventWrongMessageFormat} event
3232
* will be served

websockets-rxjava/src/main/java/com/appunite/websocket/rx/object/messages/RxObjectEventWrongBinaryMessageFormat.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,19 @@
1717
package com.appunite.websocket.rx.object.messages;
1818

1919
import com.appunite.websocket.rx.object.ObjectParseException;
20+
import com.appunite.websocket.rx.object.ObjectSerializer;
2021
import com.appunite.websocket.rx.object.ObjectWebSocketSender;
2122

2223
import java.util.Arrays;
2324

2425
import javax.annotation.Nonnull;
2526

27+
/**
28+
* Event indicating that binary data returned by server was not correctly parsed
29+
*
30+
* This means {@link ObjectParseException} was returned via
31+
* {@link ObjectSerializer#deserializeBinary(Object)}
32+
*/
2633
public class RxObjectEventWrongBinaryMessageFormat extends RxObjectEventWrongMessageFormat {
2734
@Nonnull
2835
private final byte[] message;

0 commit comments

Comments
 (0)