| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
d7fbedaec1 | Merge branch 'master' of https://git.malls.iformall.com/server/bjAirport | 7 months ago |
|
|
352077d9f8 | fix | 7 months ago |
| @@ -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 { | |||
| @@ -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<String,Integer> peopleCountMap; | |||
| public List<NioSocketHandler> 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); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -31,6 +31,10 @@ public class NioSocketHandler extends SimpleChannelInboundHandler<String>{ | |||
| 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>{ | |||
| // 你的处理逻辑 | |||
| 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<String>{ | |||
| public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { | |||
| cause.printStackTrace(); | |||
| ctx.close(); | |||
| cctx = null; | |||
| } | |||
| @@ -91,29 +96,35 @@ public class NioSocketHandler extends SimpleChannelInboundHandler<String>{ | |||
| 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<String>{ | |||
| 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;//查询在途出租车 | |||
| @@ -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<SocketChannel>{ | |||
| // 使用自定义线程池处理业务逻辑 | |||
| 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()); | |||
| } | |||