From 71b6b716361c52af290493d365a328fc1a3467e2 Mon Sep 17 00:00:00 2001
From: nnnjjj123 <494715143@qq.com>
Date: Thu, 28 Jan 2021 11:15:06 +0800
Subject: [PATCH] 1.统计接口 2.健康码
---
src/main/java/org/springblade/modules/nettyServer/ServerHandler.java | 212 +++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 196 insertions(+), 16 deletions(-)
diff --git a/src/main/java/org/springblade/modules/nettyServer/ServerHandler.java b/src/main/java/org/springblade/modules/nettyServer/ServerHandler.java
index ba26193..8713a97 100644
--- a/src/main/java/org/springblade/modules/nettyServer/ServerHandler.java
+++ b/src/main/java/org/springblade/modules/nettyServer/ServerHandler.java
@@ -4,25 +4,71 @@
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelId;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.ChannelMatcher;
import io.netty.channel.group.DefaultChannelGroup;
import io.netty.util.CharsetUtil;
import io.netty.util.concurrent.GlobalEventExecutor;
+import org.springblade.modules.Netty.entitly.Netty;
+import org.springblade.modules.Netty.service.nettyService;
+import org.springblade.modules.alarm.entity.Alarm;
+import org.springblade.modules.alarm.service.IAlarmService;
+import org.springblade.modules.alarm.vo.AlarmVO;
+import org.springblade.modules.catalog.service.catalogService;
+import org.springblade.modules.equipment.entity.Equipment;
+import org.springblade.modules.equipment.service.IEquipmentService;
+import org.springblade.modules.equipment.vo.EquipmentVOS;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PostMapping;
-import java.util.Iterator;
+import javax.annotation.PostConstruct;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Pattern;
+@Component
public class ServerHandler extends ChannelInboundHandlerAdapter {
+ private String reg_LA ="LA[d]{8}[d|A-F]{12}[d|A-F]{8}[d|A-Z]{2}[d|A-F]{4}[x2A][d|A-F]{6}[#@]";
+ private String reg_LB = "LB[\\d|A-F]{12}[\\x2A].*[#@]";
+ private String reg_LB2 = "LB[\\d|A-F]{6}[\\x2A].*[#@]";
+ private String reg_LD = "LD[d]{8}[d|A-F]{12}:[A-Z]{4}[\\x2A].*[#@]";
+
+
+ private ConcurrentHashMap<String, Channel> sessionChannelMap = new ConcurrentHashMap<String, Channel>();
+
+ @Autowired
+ private catalogService catalogService;
+
+ @Autowired
+ private nettyService nettyService;
+
+ @Autowired
+ private IEquipmentService equipmentService;
+
+ @Autowired
+ private IAlarmService alarmService;
+
+ private static ServerHandler serverHandler;
+
+ @PostConstruct
+ public void init() {
+ serverHandler = this;
+ }
/**
* 客户端与服务端创建连接的时候调用
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ System.out.println("CTX:"+ctx.channel());
System.out.println("客户端与服务端连接开始...");
- System.out.println("Channel:"+ctx.channel());
- NettyConfig.group.add(ctx.channel());
+// ChannelId id = ctx.channel().id();
+// String s = id.toString();
+ //NettyConfig.group.add(ctx.channel());
}
/**
@@ -62,25 +108,159 @@
byte[] req = new byte[buf.readableBytes()];
buf.readBytes(req);
String body = new String(req, "UTF-8");
+ String content = body;
System.out.println("接收客户端数据:" + body);
- channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer("LEOK#@!", CharsetUtil.UTF_8));
-// ByteBuf pingMessage = Unpooled.buffer();
-// pingMessage.writeBytes(req);
-// channelHandlerContext.writeAndFlush(pingMessage);
+ String ChannelName = content.substring(10, 22);//设备编码
+ String sub = content.substring(23, 27);
+ ConcurrentHashMap<String, Channel> channelHashMap = ChannelMap.getChannelHashMap();
+ if (channelHashMap==null){
+ if (!sub.equals("VIMO")){
+ // 保存当前连接
+ ChannelMap.addChannel(ChannelName,channelHandlerContext.channel());
+ }
+ }
+ else {
+ Channel channel = ChannelMap.getChannelByName(ChannelName);
+ if (channel!=channelHandlerContext.channel()|| channel==null){
+ if (!sub.equals("VIMO")){
+ // 保存当前连接
+ ChannelMap.addChannel(ChannelName,channelHandlerContext.channel());
+ }
+ }
+ }
+
+ List<String> outData = new ArrayList<>();
+ switch (content.substring(0, 2))
+ {
+ case "LA":
+ {
+ String devId = content.substring(10, 22);
+ String fqbm = content.substring(24, 26);
+ List<Map<String, Object>> list = serverHandler.equipmentService.selectInfos(devId);
+ Alarm alarm= new Alarm();
+ alarm.setAlarmType("一键报警");
+ Date day = new Date();
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ alarm.setAlarmTime(df.format(day));
+ alarm.setPlace((String) list.get(0).get("streeName"));//事发地址
+ alarm.setDeviceNumber((String) list.get(0).get("deviceNumber"));//设备编号
+ alarm.setDistrict((String) list.get(0).get("addvcd"));//行政区编码
+ alarm.setJd((String) list.get(0).get("jd"));//经度
+ alarm.setWd((String) list.get(0).get("wd"));//纬度
+ alarm.setJtype("0");
+ if (fqbm.equals("00")){
+ alarm.setWaringType("旁路");
+ }
+ else if(fqbm.equals("01")){
+ alarm.setWaringType("火警");
+ }
+ else if(fqbm.equals("02")){
+ alarm.setWaringType("挟持");
+ }
+ else if(fqbm.equals("03")){
+ alarm.setWaringType("紧急");
+ }
+ else if(fqbm.equals("04")){
+ alarm.setWaringType("救护");
+ }
+ else if(fqbm.equals("05")){
+ alarm.setWaringType("内部");
+ }
+ else if(fqbm.equals("06")){
+ alarm.setWaringType("出入");
+ }
+ else if(fqbm.equals("07")){
+ alarm.setWaringType("周边");
+ }
+ else {
+ alarm.setWaringType("防拆");
+ }
+ serverHandler.alarmService.s(alarm);
+ outData.add("LEOK#@");
+
+ break;
+ }
+ case "LD":
+ {
+// if (Pattern.matches(content, reg_LD))
+ String deviceNumber = content.substring(10, 22);
+ String keyword = content.substring(23, 27);
+ System.out.println(keyword);
+ switch(keyword)
+ {
+ case "IMEI":
+ {
+ Date d = new Date();
+ SimpleDateFormat sbf = new SimpleDateFormat("MMddHHmm");
+ outData.add("LC8C0470" + sbf.format(d) + "#@" + "LEOK#@");
+ outData.add("LEOK#@");
+ break;
+ }
+ case "SRTC":
+ {
+ Date d = new Date();
+ SimpleDateFormat sbf = new SimpleDateFormat("yyyyMMddHHmmss");
+ outData.add("LEOK#@");
+ outData.add("LC8C0700" + sbf.format(d) + "#@");
+ break;
+ }
+ case "STAS":
+ {
+ outData.add("LEOK#@");
+ outData.add("LC8100001E"+ "#@");
+ break;
+ }
+ case "TEST":
+ {
+ Date d = new Date();
+ SimpleDateFormat sbf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String format = sbf.format(d);
+ serverHandler.equipmentService.updateChannel(format,deviceNumber);
+ outData.add("LEOK#@");
+ outData.add("LEON#@");
+ break;
+ }
+ case "COMM":
+ {
+ outData.add("LEOK#@");
+ break;
+ }
+ default:
+ {
+ outData.add("LEOK#@");
+ break;
+ }
+ }
+
+ break;
+ }
+ case "LB":
+ {
+ outData.add("LEOK#@");
+ break;
+ }
+ }
+ if(outData.size() == 0)
+ {
+ outData.add("LERR#@");
+ }
+ for (int i = 0; i < outData.size(); i++)
+ {
+ channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer(outData.get(i), CharsetUtil.UTF_8));
+ }
+// channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer("LEOK#@!", CharsetUtil.UTF_8));
//服务端使用这个就能向 每个连接上来的客户端群发消息
//NettyConfig.group.writeAndFlush(info);
- Iterator<Channel> iterator = NettyConfig.group.iterator();
- System.out.println("iterator:"+iterator);
- while(iterator.hasNext()){
- //打印出所有客户端的远程地址
- System.out.println((iterator.next()).remoteAddress());
-
- }
+// Iterator<Channel> iterator = NettyConfig.group.iterator();
+// System.out.println("iterator:"+iterator);
+// while(iterator.hasNext()){
+// //打印出所有客户端的远程地址
+// System.out.println((iterator.next()).remoteAddress());
+//
+// }
}
-
-
}
--
Gitblit v1.9.3