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