11package com .yeetor .androidcontrol ;
22
3+ import com .neovisionaries .ws .client .WebSocket ;
4+ import com .neovisionaries .ws .client .WebSocketFactory ;
35import io .netty .buffer .ByteBuf ;
46import io .netty .buffer .Unpooled ;
57import io .netty .channel .ChannelFuture ;
911import io .netty .handler .codec .http .*;
1012import io .netty .handler .codec .http .websocketx .*;
1113import io .netty .util .CharsetUtil ;
14+ import org .apache .commons .lang3 .ArrayUtils ;
1215
1316/**
1417 * Created by harry on 2017/4/18.
@@ -17,6 +20,7 @@ public class WSSocketHandler extends SimpleChannelInboundHandler<Object> {
1720
1821 WebSocketServerHandshaker handshaker ;
1922 WebsocketEvent event ;
23+ byte binaryCache [] = new byte [0 ];
2024
2125 public WSSocketHandler (WebsocketEvent event ) {
2226 this .event = event ;
@@ -63,24 +67,19 @@ private void handlerWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame fra
6367 if (event != null ) {
6468 event .onTextMessage (ctx , ((TextWebSocketFrame ) frame ).text ());
6569 }
66- } else if (frame instanceof BinaryWebSocketFrame ) {
70+ } else if (frame instanceof BinaryWebSocketFrame || frame instanceof ContinuationWebSocketFrame ) {
6771 if (event != null ) {
68-
69- ByteBuf byteBuf = ((BinaryWebSocketFrame ) frame ).content ();
72+ ByteBuf byteBuf = frame .content ();
7073 byte [] bytes = new byte [byteBuf .readableBytes ()];
7174 byteBuf .getBytes (0 , bytes );
72- event .onBinaryMessage (ctx , bytes );
75+ binaryCache = ArrayUtils .addAll (binaryCache , bytes );
76+ if (frame .isFinalFragment ()) {
77+ byte [] b = binaryCache ;
78+ binaryCache = new byte [0 ];
79+ event .onBinaryMessage (ctx , b );
80+ }
7381 }
7482 }
75-
76-
77-
78- // 返回应答消息
79- // String request = ((TextWebSocketFrame) frame).text();
80- // System.out.println("服务端收到:" + request);
81- // TextWebSocketFrame tws = new TextWebSocketFrame(new Date().toString()
82- // + ctx.channel().id() + ":" + request);
83- // ctx.channel().writeAndFlush(tws);
8483 }
8584
8685 private void handleHttpRequest (ChannelHandlerContext ctx , FullHttpRequest req ) {
@@ -98,7 +97,7 @@ private void handleHttpRequest(ChannelHandlerContext ctx, FullHttpRequest req) {
9897 return ;
9998 }
10099 WebSocketServerHandshakerFactory wsFactory = new WebSocketServerHandshakerFactory (
101- null , null , false , Integer .MAX_VALUE );
100+ null , null , true , Integer .MAX_VALUE , true );
102101 handshaker = wsFactory .newHandshaker (req );
103102 if (handshaker == null ) {
104103 WebSocketServerHandshakerFactory .sendUnsupportedWebSocketVersionResponse (ctx .channel ());
0 commit comments