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