ByteBuffer handling for Jetty WebSocket messages
Closes gh-31182
This commit is contained in:
committed by
rstoyanchev
parent
f51838b6ba
commit
ed172d6269
@@ -90,11 +90,13 @@ public class JettyWebSocketHandlerAdapter {
|
||||
|
||||
@OnWebSocketMessage
|
||||
public void onWebSocketBinary(ByteBuffer payload, Callback callback) {
|
||||
BinaryMessage message = new BinaryMessage(payload, true);
|
||||
BinaryMessage message = new BinaryMessage(copyByteBuffer(payload), true);
|
||||
try {
|
||||
this.webSocketHandler.handleMessage(this.wsSession, message);
|
||||
callback.succeed();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
callback.fail(ex);
|
||||
ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger);
|
||||
}
|
||||
}
|
||||
@@ -103,16 +105,24 @@ public class JettyWebSocketHandlerAdapter {
|
||||
public void onWebSocketFrame(Frame frame, Callback callback) {
|
||||
if (OpCode.PONG == frame.getOpCode()) {
|
||||
ByteBuffer payload = frame.getPayload() != null ? frame.getPayload() : EMPTY_PAYLOAD;
|
||||
PongMessage message = new PongMessage(payload);
|
||||
PongMessage message = new PongMessage(copyByteBuffer(payload));
|
||||
try {
|
||||
this.webSocketHandler.handleMessage(this.wsSession, message);
|
||||
callback.succeed();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
callback.fail(ex);
|
||||
ExceptionWebSocketHandlerDecorator.tryCloseWithError(this.wsSession, ex, logger);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static ByteBuffer copyByteBuffer(ByteBuffer src) {
|
||||
ByteBuffer dest = ByteBuffer.allocate(src.capacity());
|
||||
dest.put(0, src, 0, src.remaining());
|
||||
return dest;
|
||||
}
|
||||
|
||||
@OnWebSocketClose
|
||||
public void onWebSocketClose(int statusCode, String reason) {
|
||||
CloseStatus closeStatus = new CloseStatus(statusCode, reason);
|
||||
|
||||
Reference in New Issue
Block a user