From 08d8e42ea64ea7aef187c595e315a64ade8ce39c Mon Sep 17 00:00:00 2001 From: winter <664946893@qq.com> Date: Wed, 30 Apr 2025 20:26:29 +0800 Subject: [PATCH] fix --- .../haikang/HKPeopleNumberFactory.java | 8 +++++++ .../haikang/netty/NioSocketHandler.java | 22 +++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java b/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java index 093857a..244479f 100644 --- a/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java +++ b/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java @@ -1,5 +1,6 @@ package com.iformall.haikang; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -54,13 +55,20 @@ public class HKPeopleNumberFactory { public void sendToDengxiang() { if (null != handlerList && handlerList.size() > 0 ) { + List notUsedList = new ArrayList(); for (int i = 0 ; i < handlerList.size(); i++) { NioSocketHandler handler = handlerList.get(i); + if (null == handler.cctx) { + notUsedList.add(handler); + } log.info("sendToDengxiang >>> "+handler.cctx+">>>>"+handler.sourceId+">>>>>>>"+handler.destId); if (null != handler && null != handler.cctx && StringUtils.isNotBlank(handler.sourceId) && StringUtils.isNotBlank(handler.destId)) { handler.sendControlData(handler.cctx, handler.sourceId,handler.destId); } } + if (notUsedList.size() > 0 ) { + handlerList.removeAll(notUsedList); + } } } diff --git a/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketHandler.java b/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketHandler.java index 0b37f64..13b55d4 100644 --- a/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketHandler.java +++ b/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketHandler.java @@ -1,6 +1,7 @@ package com.iformall.haikang.netty; import java.io.PrintWriter; +import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -50,6 +51,15 @@ public class NioSocketHandler extends SimpleChannelInboundHandler{ String clientId = ctx.channel().id().asShortText(); log.info("netty tcp 接收到用户id为"+clientId+"的消息: " + msg); cctx = ctx; + + //此处是弥补处理,客户端断开后重连 + if (null == peopleNumberFactory.handlerList) { + peopleNumberFactory.handlerList = new ArrayList(); + } + if (!peopleNumberFactory.handlerList.contains(this)) { + peopleNumberFactory.handlerList.add(this); + } + // 应答报文,根据要求应答 String repeak = msg; handleMessage(ctx,msg); @@ -64,10 +74,18 @@ public class NioSocketHandler extends SimpleChannelInboundHandler{ cause.printStackTrace(); ctx.close(); cctx = null; + log.info(ctx+" exceptionCaught"); } - - //编号2代表需要等待时长,编号3代表当前排队人数,编号4代表当前场内出租车,编号5代表在途出租车 + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + ctx.close(); + cctx = null; + log.info(ctx+" channelInactive"); + } + + //编号2代表需要等待时长,编号3代表当前排队人数,编号4代表当前场内出租车,编号5代表在途出租车 private static final int[] types = new int[] {2,3,4,5}; private void handleMessage(ChannelHandlerContext ctx,String message) {