From a2195bb51b891b872aaa89fc411ffd4f33fb16f0 Mon Sep 17 00:00:00 2001 From: chengg11 Date: Fri, 19 Jun 2015 15:51:15 -0700 Subject: add onPing() support to client can be ware of the pings sent by server --- AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java | 4 +++- AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java | 5 +++++ .../src/com/koushikdutta/async/http/WebSocketImpl.java | 12 ++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java b/AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java index e1b4015..071fe6e 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java @@ -440,8 +440,9 @@ abstract class HybiParser { } else if (opcode == OP_PING) { if (payload.length > 125) { throw new ProtocolError("Ping payload too large"); } // Log.d(TAG, "Sending pong!!"); + String message = encode(payload); sendFrame(frame(OP_PONG, payload, -1)); - + onPing(message); } else if (opcode == OP_PONG) { String message = encode(payload); onPong(message); @@ -452,6 +453,7 @@ abstract class HybiParser { protected abstract void onMessage(byte[] payload); protected abstract void onMessage(String payload); protected abstract void onPong(String payload); + protected abstract void onPing(String payload); protected abstract void onDisconnect(int code, String reason); protected abstract void report(Exception ex); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java b/AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java index 1aaafa6..90f37ee 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java @@ -7,6 +7,9 @@ public interface WebSocket extends AsyncSocket { static public interface StringCallback { public void onStringAvailable(String s); } + static public interface PingCallback { + public void onPingReceived(String s); + } static public interface PongCallback { public void onPongReceived(String s); } @@ -19,6 +22,8 @@ public interface WebSocket extends AsyncSocket { public void setStringCallback(StringCallback callback); public StringCallback getStringCallback(); + public void setPingCallback(PingCallback callback); + public void setPongCallback(PongCallback callback); public PongCallback getPongCallback(); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java index 1b82ef0..6bbd2e5 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java @@ -98,6 +98,12 @@ public class WebSocketImpl implements WebSocket { mSink.write(new ByteBufferList(frame)); } + @Override + protected void onPing(String payload) { + if (WebSocketImpl.this.mPingCallback != null) + WebSocketImpl.this.mPingCallback.onPingReceived(payload); + } + @Override protected void onPong(String payload) { if (WebSocketImpl.this.mPongCallback != null) @@ -255,6 +261,12 @@ public class WebSocketImpl implements WebSocket { return mStringCallback; } + private PingCallback mPingCallback; + @Override + public void setPingCallback(PingCallback callback) { + mPingCallback = callback; + } + private PongCallback mPongCallback; @Override public void setPongCallback(PongCallback callback) { -- cgit v1.2.3