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