From db88628e7bb03f334fa65826bd655c27859a9973 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期日, 03 十一月 2024 16:52:04 +0800
Subject: [PATCH] 1、协议版本号增加到协议解析与命令构造中; 2、增加RTU状态记录功能,为RTU远程升级做准备。

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java |  127 +++++++++++++++++++++++-------------------
 1 files changed, 70 insertions(+), 57 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java
index 9f29d8c..3e7a3e3 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java
@@ -1,10 +1,9 @@
 package com.dy.common.mw.protocol;
 
-import java.net.URI;
 import java.util.HashMap;
-import java.util.List;
+import java.util.Set;
 
-import com.dy.common.util.ClassScan;
+import org.reflections.Reflections;
 
 
 public abstract class Driver {
@@ -15,88 +14,102 @@
 	protected HashMap<String, Class<CodeParse>> downCode2Class = new HashMap<>() ;
 	protected HashMap<String, CodeParse> downCode2ClassInstance = new HashMap<>() ;
 
+	protected Notify notify ;
+
+	/**
+	 * 娓呯┖鑷繁
+	 */
+	public abstract void clear() ;
+
+	/**
+     * 璁剧疆RTU淇℃伅閫氱煡鍣�
+     * @param notify 閫氱煡
+     */
+	public void setNotify(Notify notify){
+		this.notify = notify ;
+	}
+
 	/**
 	 * 鍗曠嚎绋嬪崟渚婦river妯″紡涓嬭繍琛�
 	 * 鎵弿璇嗗埆鍔熻兘鐮佹敞瑙g被
 	 * @throws Exception 寮傚父
 	 */
 	public abstract void scanAnnotationCode() throws Exception ;
-	
 	/**
 	 * 鎵弿璇嗗埆鍔熻兘鐮佹敞瑙g被
 	 * @param driver 椹卞姩
 	 * @param protocolName 鍗忚鍚嶇О
-	 * @param uri URI
 	 * @param scanRootPackage 鎵弿鍖�
 	 * @throws Exception 寮傚父
 	 */
 	@SuppressWarnings("unchecked")
-	protected void doScanAnnotationCode(Driver driver, String protocolName, URI uri, String scanRootPackage) throws Exception{
-		ClassLoader load = driver.getClass().getClassLoader() ;
-		List<String> classNames = new ClassScan().searchClassFromUrl(new URI[]{uri}, scanRootPackage) ;
-		if(classNames != null && classNames.size() > 0){
-			String code ;
-			String[] codes ;
-			for(String cName : classNames){
-				String className = cName.substring(0,  cName.lastIndexOf('.')) ;
-				Class<?> clazz = load.loadClass(className) ;
-				Class<CodeParse> codeParseClazz ;
-				if(clazz.isAnnotationPresent(AnnotationCodeUp.class)){
-					AnnotationCodeUp ann = clazz.getAnnotation(AnnotationCodeUp.class) ;
-					if(ann != null){
-						codeParseClazz = (Class<CodeParse>)clazz ;
-						codes = ann.ifAny() ;
-						if(codes.length > 0){
-							for(String cd: codes){
-								cd = cd.trim() ;
-								if(!(cd.trim().equals(""))){
-									if(driver.upCode2Classes.containsKey(cd)){
-										throw new Exception("涓ラ噸閿欒锛屽崗璁�" + protocolName + "鐨勪笂琛屾暟鎹姛鑳界爜" + cd + "鍑虹幇浜嗛噸澶嶆敞瑙o紒") ;
-									}
-									driver.upCode2Classes.put(cd, codeParseClazz) ;
+	protected void doScanAnnotationCode(Driver driver, String protocolName, String scanRootPackage) throws Exception{
+		Reflections reflections = new Reflections(scanRootPackage); // 鎸囧畾鍖呭悕
+		String code ;
+		String[] codes ;
+		Class<CodeParse> codeParseClazz ;
+
+		Set<Class<?>> codeUpClasses = reflections.getTypesAnnotatedWith(AnnotationCodeUp.class);
+		if (codeUpClasses != null && codeUpClasses.size() > 0) {
+			for (Class<?> clazz : codeUpClasses) {
+				AnnotationCodeUp ann = clazz.getAnnotation(AnnotationCodeUp.class) ;
+				if(ann != null){
+					codeParseClazz = (Class<CodeParse>)clazz ;
+					codes = ann.ifAny() ;
+					if(codes.length > 0){
+						for(String cd: codes){
+							cd = cd.trim() ;
+							if(!(cd.trim().equals(""))){
+								if(driver.upCode2Classes.containsKey(cd)){
+									throw new Exception("涓ラ噸閿欒锛屽崗璁�" + protocolName + "鐨勪笂琛屾暟鎹姛鑳界爜" + cd + "鍑虹幇浜嗛噸澶嶆敞瑙o紒") ;
 								}
+								driver.upCode2Classes.put(cd, codeParseClazz) ;
 							}
-						}else{
-							code = ann.value().trim() ;
-							if(!(code.equals(""))){
-								if(driver.upCode2Classes.containsKey(code)){
-									throw new Exception("涓ラ噸閿欒锛屽崗璁�" + protocolName + "鐨勪笂琛屾暟鎹姛鑳界爜" + code + "鍑虹幇浜嗛噸澶嶆敞瑙o紒") ;
-								}
-								driver.upCode2Classes.put(code, codeParseClazz) ;
+						}
+					}else{
+						code = ann.value().trim() ;
+						if(!(code.equals(""))){
+							if(driver.upCode2Classes.containsKey(code)){
+								throw new Exception("涓ラ噸閿欒锛屽崗璁�" + protocolName + "鐨勪笂琛屾暟鎹姛鑳界爜" + code + "鍑虹幇浜嗛噸澶嶆敞瑙o紒") ;
 							}
+							driver.upCode2Classes.put(code, codeParseClazz) ;
 						}
 					}
 				}
-				
-				if(clazz.isAnnotationPresent(AnnotationCodeDown.class)){
-					AnnotationCodeDown ann = clazz.getAnnotation(AnnotationCodeDown.class) ;
-					if(ann != null){
-						codeParseClazz = (Class<CodeParse>)clazz ;
-						codes = ann.ifAny() ;
-						if(codes.length > 0){
-							for(String cd: codes){
-								cd = cd.trim() ;
-								if(!(cd.trim().equals(""))){
-									if(driver.downCode2Class.containsKey(cd)){
-										throw new Exception("涓ラ噸閿欒锛屽崗璁┍鍔�" + protocolName + "鐨勪笅琛屾暟鎹姛鑳界爜" + cd + "鍑虹幇浜嗛噸澶嶆敞瑙o紒") ;
-									}
-									driver.downCode2Class.put(cd, codeParseClazz) ;
+			}
+		}
+
+		Set<Class<?>> codeDownClasses = reflections.getTypesAnnotatedWith(AnnotationCodeDown.class);
+		if (codeDownClasses != null && codeDownClasses.size() > 0) {
+			for (Class<?> clazz : codeDownClasses) {
+				AnnotationCodeDown ann = clazz.getAnnotation(AnnotationCodeDown.class) ;
+				if(ann != null){
+					codeParseClazz = (Class<CodeParse>)clazz ;
+					codes = ann.ifAny() ;
+					if(codes.length > 0){
+						for(String cd: codes){
+							cd = cd.trim() ;
+							if(!(cd.trim().equals(""))){
+								if(driver.downCode2Class.containsKey(cd)){
+									throw new Exception("涓ラ噸閿欒锛屽崗璁┍鍔�" + protocolName + "鐨勪笅琛屾暟鎹姛鑳界爜" + cd + "鍑虹幇浜嗛噸澶嶆敞瑙o紒") ;
 								}
+								driver.downCode2Class.put(cd, codeParseClazz) ;
 							}
-						}else{
-							code = ann.value() ;
-							if(!(code.trim().equals(""))){
-								if(driver.downCode2Class.containsKey(code)){
-									throw new Exception("涓ラ噸閿欒锛屽崗璁┍鍔�" + protocolName + "鐨勪笅琛屾暟鎹姛鑳界爜" + code + "鍑虹幇浜嗛噸澶嶆敞瑙o紒") ;
-								}
-								driver.downCode2Class.put(code, codeParseClazz) ;
+						}
+					}else{
+						code = ann.value() ;
+						if(!(code.trim().equals(""))){
+							if(driver.downCode2Class.containsKey(code)){
+								throw new Exception("涓ラ噸閿欒锛屽崗璁┍鍔�" + protocolName + "鐨勪笅琛屾暟鎹姛鑳界爜" + code + "鍑虹幇浜嗛噸澶嶆敞瑙o紒") ;
 							}
+							driver.downCode2Class.put(code, codeParseClazz) ;
 						}
 					}
 				}
 			}
 		}
 	}
+
 	/**
 	 * 鍗曠嚎绋嬪崟渚婦river妯″紡涓嬭繍琛�
 	 * 寰楀埌涓婅鏁版嵁鍔熻兘鐮佸鐞嗙被CodeParse瀵硅薄
@@ -142,7 +155,7 @@
 		return codeParse ;
 	}
 	/**
-	 * 瑙f瀽鐢典俊骞冲彴涓婅鏁版嵁
+	 * 瑙f瀽RTU涓婅鏁版嵁
 	 * @param isLowPower 鏄惁鍦ㄤ綆鍔熻�楃幆澧冧笅杩愯
 	 * @param rtuAddr 鎺у埗鍣ㄥ湴鍧�
 	 * @param upBuffer 瀛楄妭鏁扮粍

--
Gitblit v1.8.0