Browse Source

重连时间可调

xiuwei 3 years ago
parent
commit
d4a07fa61c

+ 8 - 3
protocol-core/src/main/java/wei/yigulu/utils/FutureListenerReconnectThreadPool.java

@@ -16,6 +16,11 @@ public class FutureListenerReconnectThreadPool {
 	ScheduledExecutorService pool = Executors.newScheduledThreadPool(10);
 	private Map<BaseProtocolBuilder, ScheduledFuture> scheduledFutureMap = new ConcurrentHashMap<>();
 
+	/**
+	 * 重新连接延迟
+	 */
+	public static int  RECONNECT_DELAY=30;
+
 	private FutureListenerReconnectThreadPool() {
 	}
 
@@ -24,18 +29,18 @@ public class FutureListenerReconnectThreadPool {
 	}
 
 	public ScheduledFuture submitReconnectJob(BaseProtocolBuilder protocolBuilder, Runnable command) {
-		return submitReconnectJob(protocolBuilder, command, 30);
+		return submitReconnectJob(protocolBuilder, command, RECONNECT_DELAY);
 	}
 
 	public ScheduledFuture submitReconnectJob(BaseProtocolBuilder protocolBuilder, Runnable command, int delaySecond) {
 		synchronized (protocolBuilder) {
-            protocolBuilder.getLog().info("{},添加延时重连任务", protocolBuilder.getBuilderId());
+			protocolBuilder.getLog().info("{},添加延时重连任务", protocolBuilder.getBuilderId());
 			if (this.scheduledFutureMap.containsKey(protocolBuilder)) {
 				ScheduledFuture f = this.scheduledFutureMap.get(protocolBuilder);
 				//线程池内有客户端对应的定时任务线程
 				if (!f.isDone() ) {
 					//如果之前提交的定时任务未执行完毕
-                    protocolBuilder.getLog().info("重连任务中已经包含未执行的重连任务", protocolBuilder.getBuilderId());
+					protocolBuilder.getLog().info("重连任务中已经包含未执行的重连任务", protocolBuilder.getBuilderId());
 					f.cancel(true);
 				}
 			}

+ 4 - 19
protocol-iec104/src/main/java/wei/yigulu/iec104/apdumodel/Apdu.java

@@ -10,8 +10,6 @@ import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import wei.yigulu.iec104.container.Iec104Link;
-import wei.yigulu.iec104.container.LinkContainer;
 import wei.yigulu.iec104.exception.Iec104Exception;
 import wei.yigulu.iec104.nettyconfig.TechnicalTerm;
 import wei.yigulu.iec104.util.SendAndReceiveNumUtil;
@@ -248,14 +246,12 @@ public class Apdu {
 		byte[][] bb = new byte[0][];
 		if (this.apciType == ApciType.I_FORMAT) {
 			try {
+				if(this.asdu.getDataFrame()==null){
+					throw new Iec104Exception("I帧数据体为空");
+				}
 				bb = this.asdu.getDataFrame().handleAndAnswer(this);
 			} catch (Exception e) {
-				if (e instanceof NullPointerException) {
-					log.error("数据帧解析后的逻辑处理出现异常", e);
-					//throw new Iec104Exception("该I帧无数据体");
-				}
-				log.error("数据帧解析后的逻辑处理出现异常", e);
-				//throw new Iec104Exception("I帧响应帧编译出错");
+				log.error("数据帧解析后的逻辑处理出现异常:{}", e.getMessage());
 			}
 		} else if (this.apciType == ApciType.S_FORMAT) {
 			bb = sHandleAndAnswer();
@@ -303,17 +299,6 @@ public class Apdu {
 	 * @throws Iec104Exception iec exception
 	 */
 	public byte[][] sHandleAndAnswer() throws Iec104Exception {
-		Iec104Link link = LinkContainer.getInstance().getLink(channel.id());
-		int send = this.receiveSeqNum;
-		int send1=link.getISend();
-		if(send1>send){
-			loseSend();
-			link.setISend(send);
-		}
-		if(send1<send){
-			log.warn("我方或对方计数出错");
-			link.setISend(send);
-		}
 		return null;
 	}
 

+ 1 - 0
protocol-iec104/src/main/java/wei/yigulu/iec104/exception/Iec104Exception.java

@@ -21,6 +21,7 @@ public class Iec104Exception extends Exception {
 	 * @param msg msg
 	 */
 	public Iec104Exception(String msg) {
+		super(msg);
 		this.msg = msg;
 	}