|
@@ -13,17 +13,21 @@ import java.util.List;
|
|
|
* @author johnc
|
|
|
*/
|
|
|
@ChannelHandler.Sharable
|
|
|
-public class BinaryWebSocketFrameCodec extends MessageToMessageCodec<WebSocketFrame, ByteBuf> {
|
|
|
+public class WebSocketBinaryFrameCodec extends MessageToMessageCodec<WebSocketFrame, ByteBuf> {
|
|
|
|
|
|
@Override
|
|
|
protected void encode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) {
|
|
|
- out.add(new BinaryWebSocketFrame(msg.retain()));
|
|
|
+ out.add(new BinaryWebSocketFrame(msg.retain())); // 包装为 BinaryWebSocketFrame,并增加引用计数
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void decode(ChannelHandlerContext ctx, WebSocketFrame frame, List<Object> out) {
|
|
|
- if (frame instanceof BinaryWebSocketFrame) {
|
|
|
- out.add(frame.content().retain());
|
|
|
+ if (frame instanceof BinaryWebSocketFrame binaryFrame) {
|
|
|
+ ByteBuf content = binaryFrame.content();
|
|
|
+ out.add(content.retain()); // 引用计数增加,避免内容被释放
|
|
|
+ } else {
|
|
|
+ // 非二进制消息直接丢弃或日志记录
|
|
|
+ ctx.fireExceptionCaught(new IllegalArgumentException("Unsupported WebSocketFrame type: " + frame.getClass().getName()));
|
|
|
}
|
|
|
}
|
|
|
}
|