winter 1 месяц назад
Родитель
Сommit
352077d9f8
4 измененных файлов: 70 добавлений и 24 удалений
  1. +3
    -1
      bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java
  2. +18
    -0
      bjairService/src/main/java/com/iformall/haikang/HKPeopleNumberFactory.java
  3. +39
    -22
      bjairService/src/main/java/com/iformall/haikang/netty/NioSocketHandler.java
  4. +10
    -1
      bjairService/src/main/java/com/iformall/haikang/netty/NioSocketInitializer.java

+ 3
- 1
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 {


+ 18
- 0
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<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);
}
}
}
}
}

+ 39
- 22
bjairService/src/main/java/com/iformall/haikang/netty/NioSocketHandler.java Просмотреть файл

@@ -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;//查询在途出租车


+ 10
- 1
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<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());
}


Загрузка…
Отмена
Сохранить