diff --git a/bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java b/bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java index e681a21..ffa3d62 100644 --- a/bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java +++ b/bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java @@ -120,7 +120,7 @@ public class HaiKangController { //打印json格式上传的事件报文 String baowen = fi.getString("UTF-8"); //通过表单name属性进行解析报文 - logger.debug(">>>>>>>>>>"+baowen); + //logger.debug(">>>>>>>>>>"+baowen); switch (fi.getFieldName()) { case "event_log"://门禁、身份证事件解析 logger.info("receive Acs event"); @@ -133,8 +133,10 @@ public class HaiKangController { String ip = bobj.getString("ipAddress"); if (null != rtd) { Integer peopleNum = rtd.getInteger("peopleNum"); + logger.debug("peopleNum>>>>>>>>>>"+peopleNum); if (null != peopleNum) { peopleNumberFactory.setPeopleNumber(ip, peopleNum); + peopleNumberFactory.sendToDengxiang(); //Integer peopleNumber = peopleNumberFactory.getPeopleNumber(); //todengxiang(peopleNumber); }else { diff --git a/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java b/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java index c61fc1a..fec6d06 100644 --- a/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java +++ b/bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java @@ -1,9 +1,11 @@ package com.iformall.haikang; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.apache.commons.lang3.StringUtils; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; @@ -12,10 +14,15 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.springframework.stereotype.Component; +import com.iformall.haikang.netty.NioSocketHandler; + +import io.netty.channel.ChannelHandlerContext; + @Component public class HKPeopleNumberFactory { private Map peopleCountMap; + public List handlerList; public void setPeopleNumber(String ip,Integer count) { synchronized (ip) { @@ -41,4 +48,15 @@ public class HKPeopleNumberFactory { return all; } + public void sendToDengxiang() { + if (null != handlerList && handlerList.size() > 0 ) { + for (int i = 0 ; i < handlerList.size(); i++) { + NioSocketHandler handler = handlerList.get(i); + if (null != handler && null != handler.cctx && StringUtils.isNotBlank(handler.sourceId) && StringUtils.isNotBlank(handler.destId)) { + handler.sendControlData(handler.cctx, handler.sourceId,handler.destId); + } + } + } + + } } 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 4c7892b..0b37f64 100644 --- a/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketHandler.java +++ b/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketHandler.java @@ -31,6 +31,10 @@ public class NioSocketHandler extends SimpleChannelInboundHandler{ private HKPeopleNumberFactory peopleNumberFactory; private CarNumberFactory carNumberFactory; private final ThreadPoolTaskExecutor threadPoolTaskExecutor; + + public ChannelHandlerContext cctx; + public String sourceId; + public String destId; public NioSocketHandler(ThreadPoolTaskExecutor threadPoolTaskExecutor,HKPeopleNumberFactory peopleNumberFactory,CarNumberFactory carNumberFactory) { this.threadPoolTaskExecutor = threadPoolTaskExecutor; @@ -45,7 +49,7 @@ public class NioSocketHandler extends SimpleChannelInboundHandler{ // 你的处理逻辑 String clientId = ctx.channel().id().asShortText(); log.info("netty tcp 接收到用户id为"+clientId+"的消息: " + msg); - + cctx = ctx; // 应答报文,根据要求应答 String repeak = msg; handleMessage(ctx,msg); @@ -59,6 +63,7 @@ public class NioSocketHandler extends SimpleChannelInboundHandler{ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { cause.printStackTrace(); ctx.close(); + cctx = null; } @@ -91,29 +96,35 @@ public class NioSocketHandler extends SimpleChannelInboundHandler{ log.debug("haikang keepOnline result:"+xintiaoresult); ctx.writeAndFlush(xintiaoresult); - //给灯箱发送 - for (int i = 0 ; i < types.length ; i++) { - Map dxobj = new LinkedHashMap(); - dxobj.put("dest", source); - dxobj.put("source", dest); - dxobj.put("func", "ControlData"); - JSONArray datas1 = new JSONArray(); - Map dm1 = new HashMap(); - dm1.put("node", generateNode(types[i],source)); - datas1.add(dm1); - dxobj.put("data", datas1); - String dengxiangcontent = JSON.toJSONString(dxobj); - log.debug("haikang send result:"+dengxiangcontent); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - log.error("netty handleMessage error.",e); - } - ctx.writeAndFlush(dengxiangcontent); - } + sendControlData(ctx,source,dest); + this.sourceId = source; + this.destId = dest; } } + public void sendControlData(ChannelHandlerContext ctx,String source,String dest) { + //给灯箱发送 + for (int i = 0 ; i < types.length ; i++) { + Map dxobj = new LinkedHashMap(); + dxobj.put("dest", source); + dxobj.put("source", dest); + dxobj.put("func", "ControlData"); + JSONArray datas1 = new JSONArray(); + Map dm1 = new HashMap(); + dm1.put("node", generateNode(types[i],source)); + datas1.add(dm1); + dxobj.put("data", datas1); + String dengxiangcontent = JSON.toJSONString(dxobj); + log.debug("haikang send result:"+dengxiangcontent); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + log.error("netty handleMessage error.",e); + } + ctx.writeAndFlush(dengxiangcontent); + } + } + //编号2代表需要等待时长,编号3代表当前排队人数,编号4代表当前场内出租车,编号5代表在途出租车 private String generateNode(int type,String sn) { StringBuffer sb = new StringBuffer("0-5-").append(type).append("-"); @@ -123,10 +134,16 @@ public class NioSocketHandler extends SimpleChannelInboundHandler{ value = 1;//查询等待时长 break; case 3: - value = peopleNumberFactory.getPeopleNumber();;//查询当前排队人数 + value = peopleNumberFactory.getPeopleNumber();//查询当前排队人数 + if( value > 99) { + value = 99; + } break; case 4: value = carNumberFactory.getCarNumber();//查询场内出租车 + if( value > 99) { + value = 99; + } break; case 5: value = 1;//查询在途出租车 diff --git a/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketInitializer.java b/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketInitializer.java index c9d4646..92ad41b 100644 --- a/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketInitializer.java +++ b/bjairService/src/main/java/com/iformall/haikang/netty/NioSocketInitializer.java @@ -1,5 +1,7 @@ package com.iformall.haikang.netty; +import java.util.ArrayList; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -49,7 +51,14 @@ public class NioSocketInitializer extends ChannelInitializer{ // 使用自定义线程池处理业务逻辑 log.info(">>>>peopleNumberFactory:"+peopleNumberFactory); - pipeline.addLast(new NioSocketHandler(threadPoolTaskExecutor,peopleNumberFactory,carNumberFactory)); + NioSocketHandler handler = new NioSocketHandler(threadPoolTaskExecutor,peopleNumberFactory,carNumberFactory); + pipeline.addLast(handler); + if (null == peopleNumberFactory.handlerList) { + peopleNumberFactory.handlerList = new ArrayList(); + } + if (!peopleNumberFactory.handlerList.contains(handler)) { + peopleNumberFactory.handlerList.add(handler); + } // 连接策略 pipeline.addLast(new IpRejectHandler()); }