@@ -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()); | ||||
} | } | ||||