From bda423b1aae1d5322116511651ae03a54cdcd231 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期二, 26 十一月 2024 17:25:39 +0800 Subject: [PATCH] 1、几个测试模块系统的log4j.xml配置中的编码修改; 2、RTU升级模拟器增加命令行设置服务端IP和端口功能; 3、应王江海要求,井电双控协议中也实现远程升级功能,因井电双控协议、阀控器协议不同,而双方协议中的升级子协议相同,所以通信中间件做增量开发、适应性修改,以适应这种混合协议情况,同时也提高通信中间件运行效率。 --- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java | 143 ++++++++++++++++++++++++----------------------- 1 files changed, 72 insertions(+), 71 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 b3efc80..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瀵硅薄 @@ -113,7 +126,7 @@ } if(clazz != null){ //codeParse = clazz.newInstance() ; - codeParse = clazz.getDeclaredConstructor(CodeParse.class).newInstance(); + codeParse = clazz.getDeclaredConstructor().newInstance(); upCode2ClassInstance.put(code, codeParse) ; } } @@ -135,14 +148,14 @@ } if(clazz != null){ //codeParse = clazz.newInstance() ; - codeParse = clazz.getDeclaredConstructor(CodeParse.class).newInstance(); + codeParse = clazz.getDeclaredConstructor().newInstance(); downCode2ClassInstance.put(code, codeParse) ; } } return codeParse ; } /** - * 瑙f瀽涓婅鏁版嵁 + * 瑙f瀽RTU涓婅鏁版嵁 * @param isLowPower 鏄惁鍦ㄤ綆鍔熻�楃幆澧冧笅杩愯 * @param rtuAddr 鎺у埗鍣ㄥ湴鍧� * @param upBuffer 瀛楄妭鏁扮粍 @@ -151,18 +164,6 @@ * @return MidResult[] */ public abstract MidResult[] parseData(Boolean isLowPower, String rtuAddr, byte[] upBuffer, String upHex, DriverParserDataCallback callback, Object... params) ; - /** - * 瑙f瀽鐢典俊骞冲彴涓婅鏁版嵁 - * @param isLowPower 鏄惁鍦ㄤ綆鍔熻�楃幆澧冧笅杩愯 - * @param rtuAddr 鎺у埗鍣ㄥ湴鍧� - * @param productId 鐢典俊骞冲彴浜у搧ID锛屽綋涓嶅湪鐢典俊骞冲彴涓繍琛屾椂锛屼负null - * @param deviceId 鐢典俊骞冲彴璁惧ID锛屽綋涓嶅湪鐢典俊骞冲彴涓繍琛屾椂锛屼负null - * @param upBuffer 瀛楄妭鏁扮粍 - * @param upHex 瀛楄妭鏁扮粍16杩涘埗褰㈠紡 - * @param callback 鍥炶皟 - * @return MidResult[] - */ - public abstract MidResult[] parseData(Boolean isLowPower, String rtuAddr, Integer productId, String deviceId, byte[] upBuffer, String upHex, DriverParserDataCallback callback, Object... params) ; /** * 鏋勯�犱笅琛屾暟鎹紙鍛戒护锛� -- Gitblit v1.8.0