From 3a02431d4c4ab58e782ac8a6d40e084f19ecdc83 Mon Sep 17 00:00:00 2001
From: nnnjjj123 <494715143@qq.com>
Date: Sun, 10 Jan 2021 10:02:59 +0800
Subject: [PATCH] 1.netty调整

---
 src/main/java/org/springblade/modules/nettyServer/ServerHandler.java |  196 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 176 insertions(+), 20 deletions(-)

diff --git a/src/main/java/org/springblade/modules/nettyServer/ServerHandler.java b/src/main/java/org/springblade/modules/nettyServer/ServerHandler.java
index 4e07b6c..af535c3 100644
--- a/src/main/java/org/springblade/modules/nettyServer/ServerHandler.java
+++ b/src/main/java/org/springblade/modules/nettyServer/ServerHandler.java
@@ -4,28 +4,54 @@
 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 javax.annotation.PostConstruct;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+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;
 
@@ -38,9 +64,11 @@
 	 */
 	@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());
 	}
 
 	/**
@@ -80,27 +108,155 @@
 		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));
-		List<Map<String, Object>> list = serverHandler.catalogService.selectCatalogList();
-		System.out.println(list);
-//		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.setAddvcd((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 keyword = content.substring(23, 27);
+					System.out.println(keyword);
+					switch(keyword)
+					{
+						case "IMEI":
+						{
+							System.out.println("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":
+						{
+							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