Skip to content

Commit f780d54

Browse files
author
Zbigniew Szymański
committed
Add api for sending ping and receiving pong on WebSocket
1 parent 8607951 commit f780d54

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

AndroidAsync/src/com/koushikdutta/async/http/HybiParser.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,10 @@ public byte[] frame(byte[] data, int offset, int length) {
302302
return frame(OP_BINARY, data, -1, offset, length);
303303
}
304304

305+
public byte[] pingFrame(String data) {
306+
return frame(OP_PING, data, -1);
307+
}
308+
305309
/**
306310
* Flip the opcode so to avoid the name collision with the public method
307311
*
@@ -378,10 +382,6 @@ private byte[] frame(int opcode, byte [] data, int errorCode, int dataOffset, in
378382
return frame;
379383
}
380384

381-
public void ping(String message) {
382-
// send(frame(message, OP_PING, -1));
383-
}
384-
385385
public void close(int code, String reason) {
386386
if (mClosed) return;
387387
sendFrame(frame(OP_CLOSE, reason, code));
@@ -444,13 +444,14 @@ private void emitFrame() throws IOException {
444444

445445
} else if (opcode == OP_PONG) {
446446
String message = encode(payload);
447-
// FIXME: Fire callback...
447+
onPong(message);
448448
// Log.d(TAG, "Got pong! " + message);
449449
}
450450
}
451451

452452
protected abstract void onMessage(byte[] payload);
453453
protected abstract void onMessage(String payload);
454+
protected abstract void onPong(String payload);
454455
protected abstract void onDisconnect(int code, String reason);
455456
protected abstract void report(Exception ex);
456457

AndroidAsync/src/com/koushikdutta/async/http/WebSocket.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,21 @@ public interface WebSocket extends AsyncSocket {
77
static public interface StringCallback {
88
public void onStringAvailable(String s);
99
}
10+
static public interface PongCallback {
11+
public void onPongReceived(String s);
12+
}
1013

1114
public void send(byte[] bytes);
1215
public void send(String string);
1316
public void send(byte [] bytes, int offset, int len);
17+
public void ping(String message);
1418

1519
public void setStringCallback(StringCallback callback);
1620
public StringCallback getStringCallback();
17-
21+
22+
public void setPongCallback(PongCallback callback);
23+
public PongCallback getPongCallback();
24+
1825
public boolean isBuffering();
1926

2027
public AsyncSocket getSocket();

AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ protected void onDisconnect(int code, String reason) {
9898
protected void sendFrame(byte[] frame) {
9999
mSink.write(ByteBuffer.wrap(frame));
100100
}
101+
102+
@Override
103+
protected void onPong(String payload) {
104+
if (WebSocketImpl.this.mPongCallback != null)
105+
WebSocketImpl.this.mPongCallback.onPongReceived(payload);
106+
}
101107
};
102108
mParser.setMasking(masking);
103109
mParser.setDeflate(deflate);
@@ -228,6 +234,11 @@ public void send(String string) {
228234
mSink.write(ByteBuffer.wrap(mParser.frame(string)));
229235
}
230236

237+
@Override
238+
public void ping(String string) {
239+
mSink.write(ByteBuffer.wrap(mParser.pingFrame(string)));
240+
}
241+
231242
private StringCallback mStringCallback;
232243
@Override
233244
public void setStringCallback(StringCallback callback) {
@@ -245,6 +256,17 @@ public StringCallback getStringCallback() {
245256
return mStringCallback;
246257
}
247258

259+
private PongCallback mPongCallback;
260+
@Override
261+
public void setPongCallback(PongCallback callback) {
262+
mPongCallback = callback;
263+
}
264+
265+
@Override
266+
public PongCallback getPongCallback() {
267+
return mPongCallback;
268+
}
269+
248270
@Override
249271
public DataCallback getDataCallback() {
250272
return mDataCallback;

0 commit comments

Comments
 (0)