Skip to content

Commit c2c6bd0

Browse files
committed
Added ping and pong methods
1 parent 7a473a7 commit c2c6bd0

File tree

5 files changed

+41
-0
lines changed

5 files changed

+41
-0
lines changed

src/main/java/dev/latvian/apps/tinyserver/ws/Frame.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ public static Frame binary(byte[] buffer) {
1919
return simple(Opcode.BINARY, null, buffer);
2020
}
2121

22+
public static Frame ping(byte[] buffer) {
23+
return simple(Opcode.PING, null, buffer);
24+
}
25+
2226
public Frame appendTo(@Nullable Frame previous) {
2327
if (previous != null) {
2428
var newLen = previous.info.size() + info.size();

src/main/java/dev/latvian/apps/tinyserver/ws/RXThread.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public void run() {
4848
session.onPing(frame.payload());
4949
session.send(new Frame(new FrameInfo(Opcode.PONG, info.mask(), info.fin(), info.rsv1(), info.rsv2(), info.rsv3(), info.maskKey(), info.size()), frame.payload()));
5050
}
51+
case PONG -> session.onPong(frame.payload());
5152
case CLOSING -> {
5253
if (info.size() > 0) {
5354
var payload = ByteBuffer.wrap(frame.payload());

src/main/java/dev/latvian/apps/tinyserver/ws/WSHandler.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,28 @@ default void broadcastBinary(Supplier<byte[]> payload) {
7070
}
7171
}
7272
}
73+
74+
default void broadcastPing(byte[] payload) {
75+
var s = sessions().values();
76+
77+
if (!s.isEmpty()) {
78+
var p = Frame.ping(payload);
79+
80+
for (var session : s) {
81+
session.send(p);
82+
}
83+
}
84+
}
85+
86+
default void broadcastPing(Supplier<byte[]> payload) {
87+
var s = sessions().values();
88+
89+
if (!s.isEmpty()) {
90+
var p = Frame.ping(payload.get());
91+
92+
for (var session : s) {
93+
session.send(p);
94+
}
95+
}
96+
}
7397
}

src/main/java/dev/latvian/apps/tinyserver/ws/WSSession.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ public final void sendBinary(byte[] payload) {
5858
send(Frame.binary(payload));
5959
}
6060

61+
public final void sendPing(byte[] payload) {
62+
send(Frame.ping(payload));
63+
}
64+
6165
public void onOpen(REQ req) {
6266
}
6367

@@ -76,6 +80,9 @@ public void onBinaryMessage(byte[] message) {
7680
public void onPing(byte[] payload) {
7781
}
7882

83+
public void onPong(byte[] payload) {
84+
}
85+
7986
public final void close(WSCloseStatus status, String reason) {
8087
txThread.remoteClosed = false;
8188
txThread.closeReason = new StatusCode(status.statusCode.code(), reason);

src/test/java/dev/latvian/apps/tinyserver/test/TestWSSession.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,9 @@ public void onTextMessage(String message) {
2626
public void onPing(byte[] payload) {
2727
System.out.println("WS Ping: " + new String(payload, StandardCharsets.UTF_8));
2828
}
29+
30+
@Override
31+
public void onPong(byte[] payload) {
32+
System.out.println("WS Pong: " + new String(payload, StandardCharsets.UTF_8));
33+
}
2934
}

0 commit comments

Comments
 (0)