From 5430ccbd452a660bb55ba58d7d5e13ac8c6e7170 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期五, 26 五月 2023 15:19:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- zuul/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java | 73 +++++++++++++++++++----------------- 1 files changed, 39 insertions(+), 34 deletions(-) diff --git a/zuul/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java b/zuul/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java index b82f217..b173e90 100644 --- a/zuul/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java +++ b/zuul/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java @@ -7,6 +7,7 @@ import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelId; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -86,11 +87,6 @@ } JSONObject jsonCon = JSONObject.parseObject(jsonMsg.get("data").toString()); - if(null != ctx && ctx.channel().isActive()){ - jsonMsg.put("method", Method.pong); - sendMsgToClient(ctx, jsonMsg.toJSONString()); - } - //心跳 if(method.equals(Method.ping)) { Integer type = jsonCon.getInteger("type"); @@ -106,21 +102,24 @@ if(StringUtil.isNotEmpty(token)){ String token_ = redisUtil.getValue("USER_APP_"+ userId1);//获取缓存中最新的数据 if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向其他设备发送数据 - ChannelHandlerContext data_ = NettyChannelMap.getData_(token_.substring(0, 23)); + ChannelHandlerContext data_ = NettyChannelMap.getData_(token_.substring(token_.length() - 16)); JSONObject msg_ = new JSONObject(); msg_.put("code", 200); msg_.put("msg", "SUCCESS"); msg_.put("method", "OFFLINE"); msg_.put("data", new Object()); - this.sendMsgToClient(data_, msg_.toJSONString());//给当前通道发送消息 - new Timer().schedule(new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove_(data_); - } - }, 5000); + boolean b = this.sendMsgToClient(data_, msg_.toJSONString());//给当前通道发送消息 + if(b){ + NettyChannelMap.remove_(data_); + } +// new Timer().schedule(new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove_(data_); +// } +// }, 5000); } - NettyChannelMap.update_(token.substring(0, 23), ctx); + NettyChannelMap.update_(token.substring(token.length() - 16), ctx); NettyChannelMap.update("USER" + userId1, ctx); redisUtil.setStrValue("USER_APP_" + userId1, token); } @@ -132,33 +131,36 @@ }else{ //确保账号在单个设备上登录 if(StringUtil.isNotEmpty(token)){//APP端登录的操作 - String token_ = redisUtil.getValue("DRIVER_" + userId1);//缓存中拿最新数据 - if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向当前设备发送数据 - ChannelHandlerContext data_ = NettyChannelMap.getData_(token_.substring(0, 23)); - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(data_, msg_.toJSONString());//给当前通道发送消息 - new Timer().schedule(new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove_(data_); - } - }, 5000); - } +// String token_ = redisUtil.getValue("DRIVER_" + userId1);//缓存中拿最新数据 +// if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向当前设备发送数据 +// ChannelHandlerContext data_ = NettyChannelMap.getData_(token_.substring(token_.length() - 16)); +// if(null != data_){ +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// boolean b = this.sendMsgToClient(data_, msg_.toJSONString());//给当前通道发送消息 +// if(b){ +// NettyChannelMap.remove_(data_); +// } +// } +// } NettyChannelMap.update("DRIVER" + userId1, ctx); - NettyChannelMap.update_(token.substring(0, 23), ctx); + NettyChannelMap.update_(token.substring(token.length() - 16), ctx); redisUtil.setStrValue("DRIVER_" + userId1, token); } - - //存储通讯通道 + //存储通讯通道 if(null != ctx && ctx.channel().isActive()){ NettyChannelMap.update("DRIVER" + userId1, ctx); } } } + + if(null != ctx && ctx.channel().isActive()){ + jsonMsg.put("method", Method.pong); + sendMsgToClient(ctx, jsonMsg.toJSONString()); + } } //司机上传位置 if(method.equals(Method.location)){ @@ -212,7 +214,7 @@ * @param msg * @author TaoNingBo */ - public static void sendMsgToClient(ChannelHandlerContext ctx, String msg) { + public static boolean sendMsgToClient(ChannelHandlerContext ctx, String msg) { if (ctx != null && ctx.channel().isActive()) { ByteBuf buffer = Unpooled.copiedBuffer((msg).getBytes()); ChannelFuture sync; @@ -232,7 +234,9 @@ if(b){ NettyChannelMap.remove(ctx); } + return true; } + return sync.isSuccess(); } catch (Exception e) { System.err.println("推送发生异常,记录:"+msg); NettyChannelMap.remove(ctx); @@ -244,6 +248,7 @@ System.err.println("推送失败,长连接不存在"); NettyChannelMap.remove(ctx); } + return false; } // **链接断开 将推送消息记录 -- Gitblit v1.7.1