Skip to content

Commit fedda6a

Browse files
author
Stephane Landelle
committed
Notify Pings and Pongs, close AsyncHttpClient#517
1 parent 705abd2 commit fedda6a

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

src/main/java/com/ning/http/client/providers/netty/handler/WebSocketProtocol.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
import org.jboss.netty.handler.codec.http.HttpResponse;
2424
import org.jboss.netty.handler.codec.http.websocketx.BinaryWebSocketFrame;
2525
import org.jboss.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
26+
import org.jboss.netty.handler.codec.http.websocketx.PingWebSocketFrame;
27+
import org.jboss.netty.handler.codec.http.websocketx.PongWebSocketFrame;
28+
import org.jboss.netty.handler.codec.http.websocketx.TextWebSocketFrame;
2629
import org.jboss.netty.handler.codec.http.websocketx.WebSocketFrame;
2730

2831
import com.ning.http.client.AsyncHandler.STATE;
@@ -131,7 +134,7 @@ public void handle(Channel channel, NettyResponseFuture<?> future, Object e) thr
131134
Channels.setDiscard(channel);
132135
CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame);
133136
webSocket.onClose(closeFrame.getStatusCode(), closeFrame.getReasonText());
134-
137+
135138
} else if (frame.getBinaryData() != null) {
136139
HttpChunk webSocketChunk = new HttpChunk() {
137140
private ChannelBuffer content = frame.getBinaryData();
@@ -152,13 +155,17 @@ public void setContent(ChannelBuffer content) {
152155
}
153156
};
154157

155-
NettyResponseBodyPart rp = new NettyResponseBodyPart(null, webSocketChunk, frame.isFinalFragment());
156-
handler.onBodyPartReceived(rp);
158+
NettyResponseBodyPart part = new NettyResponseBodyPart(null, webSocketChunk, frame.isFinalFragment());
159+
handler.onBodyPartReceived(part);
157160

158161
if (frame instanceof BinaryWebSocketFrame) {
159-
webSocket.onBinaryFragment(rp);
160-
} else {
161-
webSocket.onTextFragment(rp);
162+
webSocket.onBinaryFragment(part);
163+
} else if (frame instanceof TextWebSocketFrame) {
164+
webSocket.onTextFragment(part);
165+
} else if (frame instanceof PingWebSocketFrame) {
166+
webSocket.onPing(part);
167+
} else if (frame instanceof PongWebSocketFrame) {
168+
webSocket.onPong(part);
162169
}
163170
}
164171
} else {

src/main/java/com/ning/http/client/providers/netty/ws/NettyWebSocket.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import com.ning.http.client.websocket.WebSocketByteListener;
3636
import com.ning.http.client.websocket.WebSocketCloseCodeReasonListener;
3737
import com.ning.http.client.websocket.WebSocketListener;
38+
import com.ning.http.client.websocket.WebSocketPingListener;
39+
import com.ning.http.client.websocket.WebSocketPongListener;
3840
import com.ning.http.client.websocket.WebSocketTextFragmentListener;
3941
import com.ning.http.client.websocket.WebSocketTextListener;
4042

@@ -297,4 +299,20 @@ public void onTextFragment(HttpResponseBodyPart part) {
297299
bufferFragment(fragment);
298300
}
299301
}
302+
303+
public void onPing(HttpResponseBodyPart part) {
304+
for (WebSocketListener listener : listeners) {
305+
if (listener instanceof WebSocketPingListener)
306+
// bytes are cached in the part
307+
WebSocketPingListener.class.cast(listener).onPing(part.getBodyPartBytes());
308+
}
309+
}
310+
311+
public void onPong(HttpResponseBodyPart part) {
312+
for (WebSocketListener listener : listeners) {
313+
if (listener instanceof WebSocketPongListener)
314+
// bytes are cached in the part
315+
WebSocketPongListener.class.cast(listener).onPong(part.getBodyPartBytes());
316+
}
317+
}
300318
}

0 commit comments

Comments
 (0)