diff options
author | Koushik Dutta <koush@koushikdutta.com> | 2014-08-09 11:47:12 -0600 |
---|---|---|
committer | Koushik Dutta <koush@koushikdutta.com> | 2014-08-09 11:47:12 -0600 |
commit | e86090d6b834857033412ae5463a0f082c466e0a (patch) | |
tree | 3d37811d5f9074a10bb4be6ae9f9505b4d02d3c8 | |
parent | 9681d1f0701ada9cd6aba7e2ef26ed2bb1d96039 (diff) | |
parent | f780d542a448a1c0a2dd1bf1092dafc103bb616d (diff) | |
download | AndroidAsync-e86090d6b834857033412ae5463a0f082c466e0a.tar.gz AndroidAsync-e86090d6b834857033412ae5463a0f082c466e0a.tar.bz2 AndroidAsync-e86090d6b834857033412ae5463a0f082c466e0a.zip |
Merge pull request #221 from zbsz/ping
Add api for sending ping and receiving pong on WebSocket
3 files changed, 36 insertions, 6 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java b/AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java index 80844ad..e1b4015 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java @@ -302,6 +302,10 @@ abstract class HybiParser { return frame(OP_BINARY, data, -1, offset, length); } + public byte[] pingFrame(String data) { + return frame(OP_PING, data, -1); + } + /** * Flip the opcode so to avoid the name collision with the public method * @@ -378,10 +382,6 @@ abstract class HybiParser { return frame; } - public void ping(String message) { -// send(frame(message, OP_PING, -1)); - } - public void close(int code, String reason) { if (mClosed) return; sendFrame(frame(OP_CLOSE, reason, code)); @@ -444,13 +444,14 @@ abstract class HybiParser { } else if (opcode == OP_PONG) { String message = encode(payload); - // FIXME: Fire callback... + onPong(message); // Log.d(TAG, "Got pong! " + message); } } protected abstract void onMessage(byte[] payload); protected abstract void onMessage(String payload); + protected abstract void onPong(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 8242381..1aaafa6 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java @@ -7,14 +7,21 @@ public interface WebSocket extends AsyncSocket { static public interface StringCallback { public void onStringAvailable(String s); } + static public interface PongCallback { + public void onPongReceived(String s); + } public void send(byte[] bytes); public void send(String string); public void send(byte [] bytes, int offset, int len); + public void ping(String message); public void setStringCallback(StringCallback callback); public StringCallback getStringCallback(); - + + public void setPongCallback(PongCallback callback); + public PongCallback getPongCallback(); + public boolean isBuffering(); public AsyncSocket getSocket(); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java index 8fabcb2..e4a2787 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 { protected void sendFrame(byte[] frame) { mSink.write(ByteBuffer.wrap(frame)); } + + @Override + protected void onPong(String payload) { + if (WebSocketImpl.this.mPongCallback != null) + WebSocketImpl.this.mPongCallback.onPongReceived(payload); + } }; mParser.setMasking(masking); mParser.setDeflate(deflate); @@ -228,6 +234,11 @@ public class WebSocketImpl implements WebSocket { mSink.write(ByteBuffer.wrap(mParser.frame(string))); } + @Override + public void ping(String string) { + mSink.write(ByteBuffer.wrap(mParser.pingFrame(string))); + } + private StringCallback mStringCallback; @Override public void setStringCallback(StringCallback callback) { @@ -245,6 +256,17 @@ public class WebSocketImpl implements WebSocket { return mStringCallback; } + private PongCallback mPongCallback; + @Override + public void setPongCallback(PongCallback callback) { + mPongCallback = callback; + } + + @Override + public PongCallback getPongCallback() { + return mPongCallback; + } + @Override public DataCallback getDataCallback() { return mDataCallback; |