aboutsummaryrefslogtreecommitdiffstats
path: root/AndroidAsync
diff options
context:
space:
mode:
authorKoushik Dutta <koush@koushikdutta.com>2014-08-09 11:47:12 -0600
committerKoushik Dutta <koush@koushikdutta.com>2014-08-09 11:47:12 -0600
commite86090d6b834857033412ae5463a0f082c466e0a (patch)
tree3d37811d5f9074a10bb4be6ae9f9505b4d02d3c8 /AndroidAsync
parent9681d1f0701ada9cd6aba7e2ef26ed2bb1d96039 (diff)
parentf780d542a448a1c0a2dd1bf1092dafc103bb616d (diff)
downloadAndroidAsync-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
Diffstat (limited to 'AndroidAsync')
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java11
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java9
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java22
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;