| | |
| | | package com.sinata.push.util.applets; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.sinata.push.util.SpringUtil; |
| | | import com.sinata.push.util.echo.Method; |
| | | import com.sinata.push.util.echo.NettyChannelMap; |
| | | import com.sinata.push.util.echo.NettyMsg; |
| | |
| | | import io.netty.handler.timeout.IdleState; |
| | | import io.netty.handler.timeout.IdleStateEvent; |
| | | import io.netty.util.CharsetUtil; |
| | | import org.springframework.data.redis.core.StringRedisTemplate; |
| | | |
| | | import java.util.HashMap; |
| | | |
| | |
| | | private WebSocketServerHandshaker handshaker; |
| | | |
| | | private static final String WEB_SOCKET_URL = "ws://localhost:8888/websocket"; |
| | | |
| | | // private NettyWebSocketController nettyWebSocketController = SpringUtil.getObject(NettyWebSocketController.class); |
| | | |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | private void handleHttpRequest(ChannelHandlerContext ctx, FullHttpRequest req) { |
| | | HttpHeaders headers = req.headers(); |
| | | headers.names().forEach(name -> { |
| | | System.out.println(name + ":" + headers.get(name)); |
| | | }); |
| | | // Http解码失败,向服务器指定传输的协议为Upgrade:websocket |
| | | if(!req.getDecoderResult().isSuccess() || !("websocket").equals(req.headers().get("Upgrade"))){ |
| | | System.out.println("Http解码失败"); |
| | | sendHttpResponse(ctx, req, new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.BAD_REQUEST)); |
| | | return; |
| | | } |
| | |
| | | // 根据工厂类和HTTP请求创建握手类 |
| | | handshaker = wsFactory.newHandshaker(req); |
| | | if (handshaker == null) { |
| | | System.out.println("不支持websocket"); |
| | | // 不支持websocket |
| | | WebSocketServerHandshakerFactory.sendUnsupportedWebSocketVersionResponse(ctx.channel()); |
| | | } else { |
| | | System.out.println("通过它构造握手响应消息返回给客户端"); |
| | | // 通过它构造握手响应消息返回给客户端 |
| | | handshaker.handshake(ctx.channel(), req); |
| | | } |
| | |
| | | |
| | | //给连接的客户端返回数据 |
| | | //返回心跳 |
| | | // JSONObject jsonObject = new JSONObject(); |
| | | // jsonObject.put("code", 200); |
| | | // jsonObject.put("method", Method.ok); |
| | | // jsonObject.put("msg", "SUCCESS"); |
| | | // jsonObject.put("data", new JSONObject()); |
| | | // TextWebSocketFrame tws = new TextWebSocketFrame(jsonObject.toJSONString()); |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("code", 200); |
| | | jsonObject.put("method", Method.ok); |
| | | jsonObject.put("msg", "SUCCESS"); |
| | | jsonObject.put("data", new JSONObject()); |
| | | TextWebSocketFrame tws = new TextWebSocketFrame(jsonObject.toJSONString()); |
| | | // ctx.channel().writeAndFlush(tws); |
| | | String s = NettyMsg.setMsg(Method.ok, new HashMap<String, Object>()); |
| | | ctx.writeAndFlush(Unpooled.copiedBuffer((s).getBytes())); |
| | | |
| | | |
| | | // nettyWebSocketController.JudgeOperation(ctx,requestmsg);//小程序心跳处理 |
| | | |
| | | new NettyWebSocketController().JudgeOperation(ctx,requestmsg);//小程序心跳处理 |
| | | |
| | | // 群发服务端心跳响应 |
| | | // Global.group.writeAndFlush(new TextWebSocketFrame((tws).text())); |
| | | Global.group.writeAndFlush(new TextWebSocketFrame((tws).text())); |
| | | } |
| | | |
| | | private void sendHttpResponse(ChannelHandlerContext ctx, FullHttpRequest req, FullHttpResponse res) { |