昆船链接采用多连接,支持多个昆船链接,id必须唯一

返回信息采用全部昆船服务返回,未开发单个服务信息返回
漯河-上右
LAPTOP-S9HJSOEB\昊天 2 years ago
parent a83d9c29d0
commit 1454a5979d

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

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

@ -37,10 +37,12 @@ public class PLCController {
@ApiOperation(value = "连接plc,发起请求")
public Result tcp(@RequestParam Integer id){
if(configProperties.getServerMode() == 1){
for (ConfigProperties.KSEC ksec : configProperties.getKsec()) {
try {
ksecNettyClient.createClient(configProperties.getKsec());
ksecNettyClient.createClient(ksec);
} catch (Exception e) {
Assert.isTrue(false,"连接失败ip"+configProperties.getKsec().getIp()+",port:"+configProperties.getKsec().getPort());
Assert.isTrue(false, "连接失败ip" + ksec.getIp() + ",port:" + ksec.getPort());
}
}
}else {

@ -103,19 +103,21 @@ public class InitService implements ApplicationRunner {
}else if(configProperties.getServerMode() == 1){
log.info("KESC JSON MODE");
// 昆船协议
ConfigProperties.KSEC ksec = configProperties.getKsec();
for(ConfigProperties.KSEC ksec : configProperties.getKsec()) {
if (ksec != null) {
StreetConn.init(1,"ksec");
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(1);
ksecNettyClient.reconnect(ksec);
}
} else {
log.error("ksec no config");
}
}
}
TaskDelayExecutor.runMp4DownloadExecutor();
}

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

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

@ -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<Integer,Channel> 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);
for(Integer channelId : channelMap.keySet()) {
if (channelMap.get(channelId) != null) {
channelMap.get(channelId).writeAndFlush(ksecInfo);
} else {
log.error(" no connected upPc");
}
}
}
}

@ -65,12 +65,20 @@ savePath:
# ------------服务端类型 0TCP(罗伯泰克) 1:KSEC(JSON)(昆船)
serverMode: 1
ksec:
ip: 192.168.168.11
port: 8001
- 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

Loading…
Cancel
Save