diff --git a/modules/common/src/main/java/encryptor/Encryptor.java b/modules/common/src/main/java/encryptor/Encryptor.java index 773e81b..5c027ed 100644 --- a/modules/common/src/main/java/encryptor/Encryptor.java +++ b/modules/common/src/main/java/encryptor/Encryptor.java @@ -25,7 +25,7 @@ public class Encryptor { public static void main(String[] args) { - String noEncrypt = "BFEBFBFF000A0671AK7211183"; + String noEncrypt = "178BFBFF00860F01Z22PEUHNS"; String encrypt = Encryptor.encryptStr(noEncrypt); System.out.println(encrypt); } diff --git a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java index 8ac6966..0adaf36 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -4,6 +4,8 @@ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; +import java.util.List; + @Component @ConfigurationProperties @Data @@ -31,7 +33,7 @@ public class ConfigProperties { private String userUrl; - private KSEC ksec; + private List ksec; private LightSource lightSource; @@ -92,6 +94,7 @@ public class ConfigProperties { public static class KSEC{ private String ip; private Integer port; + private Integer id; private Integer reconnectNum; private Long reconnectInterval; } diff --git a/web/src/main/java/com/zhehekeji/web/controller/PLCController.java b/web/src/main/java/com/zhehekeji/web/controller/PLCController.java index ac53d0a..d1634fd 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/PLCController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/PLCController.java @@ -37,10 +37,12 @@ public class PLCController { @ApiOperation(value = "连接plc,发起请求") public Result tcp(@RequestParam Integer id){ if(configProperties.getServerMode() == 1){ - try { - ksecNettyClient.createClient(configProperties.getKsec()); - }catch (Exception e){ - Assert.isTrue(false,"连接失败,ip:"+configProperties.getKsec().getIp()+",port:"+configProperties.getKsec().getPort()); + for (ConfigProperties.KSEC ksec : configProperties.getKsec()) { + try { + ksecNettyClient.createClient(ksec); + } catch (Exception e) { + Assert.isTrue(false, "连接失败,ip:" + ksec.getIp() + ",port:" + ksec.getPort()); + } } }else { diff --git a/web/src/main/java/com/zhehekeji/web/service/InitService.java b/web/src/main/java/com/zhehekeji/web/service/InitService.java index 307609d..ccc1177 100644 --- a/web/src/main/java/com/zhehekeji/web/service/InitService.java +++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java @@ -103,17 +103,19 @@ public class InitService implements ApplicationRunner { }else if(configProperties.getServerMode() == 1){ log.info("KESC JSON MODE"); // 昆船协议 - ConfigProperties.KSEC ksec = configProperties.getKsec(); - if(ksec != null){ - StreetConn.init(1,"ksec"); - try { - ksecNettyClient.createClient(ksec); - }catch (Exception e){ - log.error("kesc connect error,url:{},port:{}",ksec.getIp(),ksec.getPort()); - ksecNettyClient.reconnect(1); + for(ConfigProperties.KSEC ksec : configProperties.getKsec()) { + + if (ksec != null) { + StreetConn.init(ksec.getId(), "ksec"); + try { + ksecNettyClient.createClient(ksec); + } catch (Exception e) { + log.error("kesc connect error,url:{},port:{}", ksec.getIp(), ksec.getPort()); + ksecNettyClient.reconnect(ksec); + } + } else { + log.error("ksec no config"); } - }else { - log.error("ksec no config"); } } TaskDelayExecutor.runMp4DownloadExecutor(); diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KescFilter.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KescFilter.java index 57a8aca..508946a 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KescFilter.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KescFilter.java @@ -1,5 +1,6 @@ package com.zhehekeji.web.service.ksec; +import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.service.*; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -21,13 +22,15 @@ public class KescFilter extends ChannelInitializer { private KsecInfo ksecInfo; private PlcService plcService; + private ConfigProperties.KSEC ksec; private KsecNettyClient nettyClient; - public KescFilter(KsecInfo ksecInfo, PlcService plcService, KsecNettyClient nettyClient){ + public KescFilter(ConfigProperties.KSEC ksec, KsecInfo ksecInfo, PlcService plcService, KsecNettyClient nettyClient){ this.ksecInfo = ksecInfo; this.plcService = plcService; this.nettyClient = nettyClient; + this.ksec = ksec; } @@ -39,6 +42,6 @@ public class KescFilter extends ChannelInitializer { ByteBuf byteBuf = Unpooled.copiedBuffer(">".getBytes()); ph.addLast(new KsecDecoder(10000,byteBuf,plcService)); ph.addLast(new KescEncoder()); - ph.addLast(new KescNettyHandler(ksecInfo,nettyClient)); + ph.addLast(new KescNettyHandler(ksec,ksecInfo,nettyClient)); } } diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KescNettyHandler.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KescNettyHandler.java index 100ce53..320472e 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KescNettyHandler.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KescNettyHandler.java @@ -1,5 +1,6 @@ package com.zhehekeji.web.service.ksec; +import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.service.StreetConn; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; @@ -16,12 +17,13 @@ import lombok.extern.slf4j.Slf4j; public class KescNettyHandler extends ChannelInboundHandlerAdapter { /** 客户端请求的心跳命令 */ private KsecInfo heart; + private ConfigProperties.KSEC ksec; private KsecNettyClient nettyClient; - public KescNettyHandler(KsecInfo ksecInfo,KsecNettyClient nettyClient){ - + public KescNettyHandler(ConfigProperties.KSEC ksec , KsecInfo ksecInfo, KsecNettyClient nettyClient){ + this.ksec = ksec; this.heart = ksecInfo; this.nettyClient = nettyClient; } @@ -32,7 +34,7 @@ public class KescNettyHandler extends ChannelInboundHandlerAdapter { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { log.info("upPc connected "); - StreetConn.conn(1); + StreetConn.conn(ksec.getId()); ctx.fireChannelActive(); } @@ -42,9 +44,9 @@ public class KescNettyHandler extends ChannelInboundHandlerAdapter { @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { log.info("upPc closed"); - StreetConn.disConn(1); + StreetConn.disConn(ksec.getId()); log.info(" streetId reconnect......"); - nettyClient.reconnect(1); + nettyClient.reconnect(ksec); } /** diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecNettyClient.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecNettyClient.java index cf3bbd0..82ff45c 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecNettyClient.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecNettyClient.java @@ -14,6 +14,8 @@ import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; @Slf4j @Component @@ -25,7 +27,7 @@ public class KsecNettyClient { @Resource private ConfigProperties configProperties; - private static Channel channel; + private static Map channelMap = new HashMap<>(); public void createClient(ConfigProperties.KSEC ksec) throws InterruptedException { String lotnum = FileUtil.getText("lastLotnum"); @@ -39,22 +41,21 @@ public class KsecNettyClient { client.group(group); client.channel(NioSocketChannel.class); KsecInfo heart = KsecInfo.heart(); - client.handler(new KescFilter(heart, plcService,this)); + client.handler(new KescFilter(ksec,heart, plcService,this)); // 连接服务端 - channel = client.connect(ksec.getIp(), ksec.getPort()).sync().channel(); + channelMap.put(ksec.getId(),client.connect(ksec.getIp(), ksec.getPort()).sync().channel()) ; } /** * 断线重连 尝试 RECONNECT_NUM 次 * - * @param upId + * @param */ - public void reconnect(Integer upId) { + public void reconnect(ConfigProperties.KSEC ksec) { Boolean isConnected = false; int num = 0; - ConfigProperties.KSEC ksec = configProperties.getKsec(); if (ksec == null) { - log.error("reconnect ,upPc is null ,id:{}", upId); + log.error("reconnect ,upPc is null ,id:{}", ksec.getIp()); return; } try { @@ -69,10 +70,11 @@ public class KsecNettyClient { //没连上 继续 catch (Exception e) { //关闭当前链接 - if(channel!=null) { - channel.close(); + if(channelMap.get(ksec.getId())!=null) { + channelMap.get(ksec.getId()).close(); + channelMap.remove(ksec.getId()); } - log.error("reconnect error num:{}", num); + log.error("reconnect error num:{},kescId:{}", num,ksec.getId()); num++; try{ Thread.sleep(ksec.getReconnectInterval()); @@ -86,16 +88,17 @@ public class KsecNettyClient { if (isConnected) { log.info("plc reconnect success"); } else { - log.error("plc reconnect error .upPcId:{},reconnect num:{},ip:{},port:{}", upId, num, ksec.getIp(), ksec.getPort()); + log.error("plc reconnect error .upPcId:{},reconnect num:{},ip:{},port:{}", ksec.getIp(), num, ksec.getIp(), ksec.getPort()); } } public static void write(KsecInfo ksecInfo){ - if(channel != null){ - channel.writeAndFlush(ksecInfo); - }else { - log.error(" no connected upPc"); + for(Integer channelId : channelMap.keySet()) { + if (channelMap.get(channelId) != null) { + channelMap.get(channelId).writeAndFlush(ksecInfo); + } else { + log.error(" no connected upPc"); + } } - } } diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 0404d58..7d77be6 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -65,12 +65,20 @@ savePath: # ------------服务端类型 0:TCP(罗伯泰克) 1:KSEC(JSON)(昆船) serverMode: 1 ksec: - ip: 192.168.168.11 - port: 8001 - #断点重连的次数:-1->不断重连 - reconnectNum: -1 - #断点重连的时间间隔(单位:ms) - reconnectInterval: 10000 + - id: 1 + ip: 127.0.0.1 + port: 4000 + #断点重连的次数:-1->不断重连 + reconnectNum: -1 + #断点重连的时间间隔(单位:ms) + reconnectInterval: 10000 + - id: 2 + ip: 127.0.0.1 + port: 3001 + reconnectNum: -1 + #断点重连的时间间隔(单位:ms) + reconnectInterval: 10000 + # ------------ 实时视频流 全部页面的格式 行列数量 videoStyleConfig: videoStyleRow: 4