From c475f9ad3290c2593897736144758b54e2b2f407 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期一, 27 十一月 2023 19:30:13 +0800
Subject: [PATCH] mwTest-client初步实现

---
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/Code.java               |   15 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalDecoder.java      |   91 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResRegisterVo.java      |   45 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/UpDataVo.java              |  174 ++++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java       |   96 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/.gitignore                                                        |   34 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/application.yml                                |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java          |  268 ++++++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnitConfigVo.java  |   29 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClient.java          |   40 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnit.java            |  112 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.yml                                     |   64 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResStartVo.java         |   47 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java        |   55 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaConnect.java       |   55 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/RtuData4HAC_NBhV2_5.java   |   46 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml                                                           |  121 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalEncoder.java      |   51 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaConnectPool.java   |  107 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_SupportUnit.java       |   20 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java             |   18 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/TestBase64.java            |   23 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnitConfigVo.java  |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnitConfigVo.java    |    5 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpPost.java              |   11 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalCodecFactory.java |   35 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnitAdapter.java     |    9 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaHandler.java       |   94 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/Config.xml                                     |   48 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/Server.java                       |  134 +++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java        |   84 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/RtuData4MeterV1_0.java     |  165 ++++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnitAdapter.java   |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_RmiClUnit.java         |   19 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnitAdapter.java   |   10 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/UpDataPayloadVo.java       |   16 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/MyThreadJob.java           |   76 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiResponseVo.java      |   77 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_HttpClUnit.java        |   19 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java          |  110 ++
 40 files changed, 2,438 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/.gitignore b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/.gitignore
new file mode 100644
index 0000000..99e214e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/.gitignore
@@ -0,0 +1,34 @@
+HELP.md
+target/
+/pipIrr-mwTest-client.iml
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml
new file mode 100644
index 0000000..6e14d6b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/pom.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>pipIrr-mw</artifactId>
+        <groupId>com.dy</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <packaging>jar</packaging>
+    <artifactId>pipIrr-mwTest-client</artifactId>
+    <version>1.0.0</version>
+    <name>pipIrr-mwTest-client</name>
+    <description>妯℃嫙RTU娴嬭瘯绔�</description>
+
+    <dependencies>
+        <!-- apache mina -->
+        <dependency>
+            <groupId>org.apache.mina</groupId>
+            <artifactId>mina-core</artifactId>
+            <version>2.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>2.0.7</version>
+        </dependency>
+
+        <!-- 娴嬭瘯 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <!-- 璇ユ彃浠朵笉浼氬皢椤圭洰涓紩鍏ョ殑渚濊禆鎵撹繘鏈�缁堢殑 Jar 鏂囦欢 -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <!-- 鐢熸垚鐨刯ar涓紝涓嶈鍖呭惈pom.xml鍜宲om.properties杩欎袱涓枃浠� -->
+                        <addMavenDescriptor>false</addMavenDescriptor>
+                        <!-- 杩欓儴鍒嗗彲鏈夊彲鏃�,鍔犱笂鐨勮瘽鍒欑洿鎺ョ敓鎴愬彲杩愯jar鍖� -->
+                        <manifest>
+                            <mainClass>com.dy.testClient.Server</mainClass>
+                            <useUniqueVersions>false</useUniqueVersions>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                        </manifest>
+                        <!-- manifestEntries鐨勪綔鐢ㄦ槸鎸囧畾鏈湴锛堣嚜宸变笅杞界殑lib涓嬬殑锛塲ar鍖呮坊鍔犲埌MANIFEST.MF鏂囦欢涓幓
+                        <manifestEntries>
+                            <Class-Path>.lib/alipay-sdk.java.jar</Class-Path>
+                        </manifestEntries>
+                        -->
+                    </archive>
+                    <!-- 鎺掗櫎鏌愪釜鏂囦欢
+                    <excludes>
+                        <exclude>com/dy/App.class</exclude>
+                    </excludes>
+                    -->
+                    <!-- 鍙墽琛宩ar杩涜鍛藉悕銆傝繖鏍蜂細鎵撳寘鎴愪袱涓猨ar鍖咃紝涓嶄細瀵规櫘閫歫ar閲嶆柊鍛藉悕銆�
+                    <classifier>exec</classifier>
+                     -->
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- 褰撻」鐩腑渚濊禆姣旇緝澶氭椂锛屾垜浠彲浠ュ�熷姪 maven-dependency-plugin 鎻掍欢鑷姩甯垜浠笅杞戒緷璧栫殑 Jar 鏂囦欢锛屾帹鑽愬皢璇ユ彃浠剁粦瀹氬埌package鐢熷懡鍛ㄦ湡涓� -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <!-- 缁戝畾鐢熷懡鍛ㄦ湡 -->
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <!-- 璁剧疆渚濊禆鐨勫瓨鏀捐矾寰� -->
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <!-- 璁剧疆java缂栬瘧鐗堟湰锛岃繍琛岀幆澧冪増鏈� -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <!-- source锛� 婧愪唬鐮佺紪璇戠増鏈紱target锛� 鐩爣骞冲彴缂栬瘧鐗堟湰锛沞ncoding锛� 瀛楃闆嗙紪鐮併�� -->
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${encoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- 瑙e喅璧勬簮鏂囦欢鐨勭紪鐮侀棶棰� -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <configuration>
+                    <encoding>${encoding}</encoding>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <!-- maven閲屾墽琛屾祴璇曠敤渚嬬殑鎻掍欢 -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+
+        </plugins>
+    </build>
+</project>
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_HttpClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_HttpClUnit.java
new file mode 100644
index 0000000..2796884
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_HttpClUnit.java
@@ -0,0 +1,19 @@
+package com.dy.testClient;
+
+import com.dy.testClient.tcpClient.TcpClUnitAdapter;
+import com.dy.testClient.tcpClient.TcpClUnitConfigVo;
+
+
+public class AdapterImp_TcpClUnit implements TcpClUnitAdapter {
+	
+	private TcpClUnitConfigVo configVo ;
+
+	public TcpClUnitConfigVo getConfig() {
+		return configVo;
+	}
+	
+	public void setConfig(TcpClUnitConfigVo configVo){
+		this.configVo = configVo ;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_RmiClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_RmiClUnit.java
new file mode 100644
index 0000000..2ca9436
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_RmiClUnit.java
@@ -0,0 +1,19 @@
+package com.dy.testClient;
+
+
+import com.dy.testClient.rmiClient.RmiClUnitAdapter;
+import com.dy.testClient.rmiClient.RmiClUnitConfigVo;
+
+public class AdapterImp_RmiClUnit implements RmiClUnitAdapter {
+	
+	private RmiClUnitConfigVo configVo ;
+
+	public RmiClUnitConfigVo getConfig() {
+		return configVo;
+	}
+	
+	public void setConfig(RmiClUnitConfigVo configVo){
+		this.configVo = configVo ;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_SupportUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_SupportUnit.java
new file mode 100644
index 0000000..93d2c61
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/AdapterImp_SupportUnit.java
@@ -0,0 +1,20 @@
+package com.dy.testClient;
+
+import com.dy.common.mw.support.SupportUnitAdapter;
+import com.dy.common.mw.support.SupportUnitConfigVo;
+
+public class AdapterImp_SupportUnit implements SupportUnitAdapter {
+	
+	private SupportUnitConfigVo configVo = null ;
+
+	@Override
+	public SupportUnitConfigVo getConfig() {
+		return this.configVo;
+	}
+
+	public void setConfig(SupportUnitConfigVo configVo) {
+		this.configVo = configVo;
+	}
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/Server.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/Server.java
new file mode 100644
index 0000000..51ec694
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/Server.java
@@ -0,0 +1,134 @@
+package com.dy.testClient;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.dy.testClient.tcpClient.TcpClUnit;
+import com.dy.testClient.tcpClient.TcpClUnitConfigVo;
+import org.jdom2.Document;
+
+import com.dy.testClient.rmiClient.RmiClUnit;
+import com.dy.testClient.rmiClient.RmiClUnitConfigVo;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.mw.support.SupportUnit;
+import com.dy.common.mw.support.SupportUnitConfigVo;
+import com.dy.common.util.ConfigXml;
+public class Server {
+
+    private ConfigXml conf = null ;
+    private Document doc = null ;
+    private boolean showStartInfo = false ;
+
+    private final List<UnitInterface> units = new ArrayList<UnitInterface>() ;
+
+    /**
+     * @param args
+     */
+    public static void main(String[] args) {
+        Server sv = new Server();
+        Long start = System.currentTimeMillis() ;
+        try {
+            sv.conf = new ConfigXml() ;
+            sv.doc = sv.conf.createDom(sv.getClass(), "/config.xml") ;
+            ////////////////
+            //鏈嶅姟 閰嶇疆
+            sv.showStartInfo = sv.conf.getSetAttrBoolean(sv.doc, "config.server", "showStartInfo", null, null) ;
+
+            sv.startUnits() ;
+
+            String svName = null ;
+            try{
+                svName = sv.conf.getSetAttrTxt(sv.doc, "config.server", "name", null, false, null) ;
+            }catch(Exception e){
+                svName = "" ;
+            }
+
+            System.out.println("") ;
+            System.out.println("OOOOOOOOOO           OOOOOOOO       OOOOOOOO") ;
+            System.out.println("@@@@@@@@@@@@@@@@#O    $@@@@@@@@&    @@@@@@@@#") ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@#    @@@@@@@@# $@@@@@@@@&") ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@@@#   #@@@@@@@@@@@@@@@@O") ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@@@@@   &@@@@@@@@@@@@@@") ;
+            System.out.println("@@@@@@$      $@@@@@@@@@&   O@@@@@@@@@@@#") ;
+            System.out.println("@@@@@@$        @@@@@@@@@     @@@@@@@@@&  " + svName + "tcpTestClient " ) ;
+            System.out.println("@@@@@@$        @@@@@@@@@     &@@@@@@@@") ;
+            System.out.println("@@@@@@$       O@@@@@@@@@     &@@@@@@@@") ;
+            System.out.println("@@@@@@$      #@@@@@@@@@$     &@@@@@@@@" ) ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@@@@#      &@@@@@@@@   Runing in standalone mode" ) ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@@@&       &@@@@@@@@   Startup in " + (System.currentTimeMillis() - start) + " MS" ) ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@#         &@@@@@@@@") ;
+            System.out.println("@@@@@@@@@@@@@@@@#O           &@@@@@@@@") ;
+            System.out.println("") ;
+
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    private void startUnits(){
+        try {
+            ////////////////////////////////////////////////////////
+            //鏀寔妯″潡锛� springHibernate鍜� 绾跨▼姹�
+            SupportUnitConfigVo supVo = new SupportUnitConfigVo() ;
+            //鐭伐浣滄椂闀跨嚎绋嬫睜锛岀嚎绋嬭礋璐g敤鏃惰緝鐭殑宸ヤ綔浠诲姟
+            supVo.short_maxThread = conf.getSetAttrPlusInt(doc, "config.support", "short_maxThread", null, 1, 1000, null) ;//姹犱腑鏈�澶х嚎绋嬫暟涓烘墍鏈塁PU鏍告暟+1
+            supVo.short_minThread = conf.getSetAttrPlusInt(doc, "config.support", "short_minThread", null, 1, 5, null) ;//姹犱腑鏈�灏忕嚎绋嬫暟
+            supVo.short_freeTimeout = conf.getSetAttrPlusInt(doc, "config.support", "short_freeTimeout", null, 1, 90, null) * 1000 ;//绾跨▼鏁扮┖闂叉椂闀匡紝鑻ユ睜涓嚎绋嬫暟閲忓ぇ浜巑inThread锛屼笖鏈夌殑绾跨▼绌洪棽鏃堕暱瓒呰繃freeTimeout锛屽垯娓呴櫎璇ョ嚎绋嬶紝涓轰簡涓嶆竻闄わ紝鎶妋inThread涓巑axThread璁剧疆鐩哥瓑
+            supVo.short_busyTimeout = conf.getSetAttrPlusInt(doc, "config.support", "short_busyTimeout", null, 1, 10, null) * 1000 ;//绾跨▼涓嶉棿鏂伐浣滄椂闀匡紙鍗曚綅涓虹)瓒呮椂闄愶紝璁や负绾跨▼宸茬粡浜嗗穿婧冿紝灏嗗己鍒舵竻闄わ紝鐭伐浣滄椂闀胯缃负5绉�
+            //闀垮伐浣滄椂闀跨嚎绋嬫睜锛岀嚎绋嬭礋璐g敤鏃惰緝闀跨殑宸ヤ綔浠诲姟
+            supVo.long_maxThread = conf.getSetAttrInt(doc, "config.support", "long_maxThread", null, -1, 1000, null)  ;//姹犱腑鏈�澶х嚎绋嬫暟,鑻ヤ负-1锛屼笉鍙楅檺鍒�
+            if(supVo.long_maxThread < 0){
+                supVo.long_maxThread = -1 ;
+            }
+            supVo.long_minThread = conf.getSetAttrPlusInt(doc, "config.support", "long_minThread", null, 0, 5, null) ;//姹犱腑鏈�灏忕嚎绋嬫暟
+            supVo.long_freeTimeout = conf.getSetAttrPlusInt(doc, "config.support", "long_freeTimeout", null, 1, 90, null) * 1000 ;//绾跨▼鏁扮┖闂叉椂闀匡紝鑻ユ睜涓嚎绋嬫暟閲忓ぇ浜巑inThread锛屼笖鏈夌殑绾跨▼绌洪棽鏃堕暱瓒呰繃freeTimeout锛屽垯娓呴櫎璇ョ嚎绋�
+            supVo.long_busyTimeout = conf.getSetAttrInt(doc, "config.support", "long_busyTimeout", null, -1, 10, null) ;//绾跨▼涓嶉棿鏂伐浣滄椂闀匡紙鍗曚綅涓虹)瓒呮椂闄愶紝鑻ヤ负-1锛屼笉鍙楅檺鍒�
+            if(supVo.long_busyTimeout < 0){
+                supVo.long_busyTimeout = -1 ;
+            }
+
+            supVo.showStartInfo = showStartInfo ;
+
+            AdapterImp_SupportUnit supAdap = new AdapterImp_SupportUnit() ;
+            supAdap.setConfig(supVo);
+            SupportUnit supUnit = SupportUnit.getInstance() ;
+            supUnit.setAdapter(supAdap);
+            supUnit.start(obj -> {
+            });
+            units.add(supUnit) ;
+
+            // ///////////////
+            // rmi 妯″潡
+            RmiClUnitConfigVo rmiClVo = new RmiClUnitConfigVo();
+            rmiClVo.svUrl = conf.getSetAttrTxt(doc, "config.rmiCl", "rmiSvUrl", null, false, null) ;
+            rmiClVo.svContext = conf.getSetAttrTxt(doc, "config.rmiCl", "rmiSvContext", null, false, null) ;
+            rmiClVo.svPort = conf.getSetAttrPlusInt(doc, "config.rmiCl", "rmiSvPort", null, 0, 65535, null) ;
+            AdapterImp_RmiClUnit rmiClAdap = new AdapterImp_RmiClUnit();
+            rmiClAdap.setConfig(rmiClVo);
+            RmiClUnit rmiClUnit = RmiClUnit.getInstance();
+            rmiClUnit.setAdapter(rmiClAdap);
+            rmiClUnit.start(obj -> {
+            });
+            units.add(rmiClUnit) ;
+
+
+            // ///////////////
+            // Tcp Client 妯″潡
+            TcpClUnitConfigVo tcpClVo = new TcpClUnitConfigVo();
+            tcpClVo.enable = conf.getSetAttrBoolean(doc, "config.tcpCl", "enable", null, null) ;
+            tcpClVo.heartbeatTimes = conf.getSetAttrPlusInt(doc, "config.tcpCl", "heartbeatTimes", null, 1, 10, null) ;//杩炵画閰嶇疆娆℃暟蹇冭烦鍚庡彂閫佷竴娆℃暟鎹�
+            tcpClVo.sendInterval = conf.getSetAttrPlusInt(doc, "config.tcpCl", "sendInterval", null, 1, 60, null) ;//鍙戦�佸績璺虫垨鏁版嵁鐨勬椂闂撮棿闅�
+            if(tcpClVo.enable){
+                AdapterImp_TcpClUnit httpClAdap = new AdapterImp_TcpClUnit();
+                httpClAdap.setConfig(tcpClVo);
+                TcpClUnit httpClUnit = TcpClUnit.getInstance();
+                httpClUnit.setAdapter(httpClAdap);
+                httpClUnit.start(obj -> {
+                });
+                units.add(httpClUnit) ;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
+
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java
new file mode 100644
index 0000000..7379686
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java
@@ -0,0 +1,18 @@
+package com.dy.testClient;
+
+public class ServerProperties {
+	
+	//RTU寮�濮嬪湴鍧�
+	public static Long rtuAddrStart = 0L ;
+	//RTU鎴鍦板潃
+	public static Long rtuAddrEnd = 0L ;
+	//鏈嶅姟绔疘P
+	public static String serverIp = "" ;
+	//鏈嶅姟绔笂涓嬫枃
+	public static Integer serverPort = 0 ;
+	//鍙戦�佹暟鎹鏁�
+	public static Integer sendTimes = 0 ;
+	
+	//mwTestServer鎺у埗鏄惁鍚姩
+	public static boolean startWork = false ;
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnit.java
new file mode 100644
index 0000000..9851e91
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnit.java
@@ -0,0 +1,112 @@
+package com.dy.testClient.httpCl;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import com.dy.testClient.rmiClient.RmiClUnit;
+import com.dy.testClient.ServerProperties;
+import com.dy.common.threadPool.ThreadPool;
+import com.dy.common.threadPool.TreadPoolFactory;
+import com.dy.common.mw.UnitAdapterInterface;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.mw.UnitStartedCallbackInterface;
+
+public class HttpClUnit implements UnitInterface {
+
+	private static Logger log = LogManager.getLogger(HttpClUnit.class) ;
+	
+	private static HttpClUnit instance = new HttpClUnit() ;
+	
+	public static HttpClUnitAdapter adapter ;
+	public static HttpClUnitConfigVo confVo ;
+	
+	private static ThreadPool.Pool pool ;
+	
+	private static Integer totalRunedClientCount = 0;
+	private static Integer totalOverClientCount = 0;
+	
+	private static Long startTime = 0L ;
+	
+	private HttpClUnit(){} ;
+	
+	public static HttpClUnit getInstance(){
+		return instance ;
+	}
+	
+	@Override
+	public void setAdapter(UnitAdapterInterface adapter) throws Exception {
+		if(adapter == null){
+			throw new Exception("Http Client妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ;
+		}
+		HttpClUnit.adapter = (HttpClUnitAdapter)adapter ; 
+		HttpClUnit.confVo = HttpClUnit.adapter.getConfig() ;
+		if(HttpClUnit.confVo == null){
+			throw new Exception("Http Client妯″潡閰嶇疆瀵硅薄涓嶈兘涓虹┖锛�") ;
+		}
+	}
+
+	@Override
+	public void start(UnitStartedCallbackInterface callback) throws Exception {
+	    pool = TreadPoolFactory.getThreadPoolLong() ;
+		System.out.println("Http Client妯″潡鎴愬姛鍚姩");
+		this.doStart();
+	    callback.call(null) ;
+	}
+
+	@Override
+	public void stop(UnitStartedCallbackInterface callback) throws Exception {
+		callback.call(null);
+	}
+	
+	private void doStart(){
+		new Thread(new Runnable(){
+			@Override
+			public void run() {
+				try {
+					while(true){
+						if(!ServerProperties.startWork){
+							Thread.sleep(100L);
+						}else{
+							startTime = System.currentTimeMillis() ;
+							for(Long i = ServerProperties.rtuAddrStart ; i <= ServerProperties.rtuAddrEnd; i++){
+								totalRunedClientCount++ ;
+								startClient(i) ;
+							}
+							while(true){
+								if(totalOverClientCount.longValue() >= totalRunedClientCount.longValue()){
+									Long seconds = (System.currentTimeMillis() - startTime)/1000 ;
+									RmiClUnit.getInstance().reportHadReportOver(seconds) ;
+									System.out.println("鍏辩敤鏃�" + seconds + "绉�");
+									break ;
+								}else{
+									Thread.sleep(100L);
+								}
+							}
+							break;
+						}
+					}
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+		}).start();
+	}
+	
+	private void startClient(Long imei){
+		try {
+			pool.putJob(new MyThreadJob("" + imei));
+		} catch (Exception e) {
+			log.error("HttpClUnit.startClient() ", e);
+		}
+	}
+	
+
+	public static synchronized void clientOver(){
+		totalOverClientCount++;
+		if(totalOverClientCount % 100 == 0){
+			RmiClUnit.getInstance().reportHadReportCount(totalOverClientCount);
+			System.out.println("宸茬粡鍙戦��" + totalOverClientCount + "鏉℃暟鎹�");
+		}
+	}
+	
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnitAdapter.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnitAdapter.java
new file mode 100644
index 0000000..8f80484
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnitAdapter.java
@@ -0,0 +1,9 @@
+package com.dy.testClient.httpCl;
+
+import com.dy.common.mw.UnitAdapterInterface;
+
+public interface HttpClUnitAdapter extends UnitAdapterInterface {
+
+	public HttpClUnitConfigVo getConfig() ;
+	
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnitConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnitConfigVo.java
new file mode 100644
index 0000000..7b3513d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpClUnitConfigVo.java
@@ -0,0 +1,5 @@
+package com.dy.testClient.httpCl;
+
+public class HttpClUnitConfigVo {
+	public boolean enable ;
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpPost.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpPost.java
new file mode 100644
index 0000000..3b8e37b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/HttpPost.java
@@ -0,0 +1,11 @@
+package com.dy.testClient.httpCl;
+
+import com.dy.testClient.ServerProperties;
+import com.dy.common.util.HttpUtils;
+
+public class HttpPost {
+
+	public static synchronized void post(byte[] bytes) throws Exception{
+		//HttpUtils.doPost(ServerProperties.serverUrl, ServerProperties.serverContext, null, null, bytes) ;
+	}
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/MyThreadJob.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/MyThreadJob.java
new file mode 100644
index 0000000..d3494c5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/MyThreadJob.java
@@ -0,0 +1,76 @@
+package com.dy.testClient.httpCl;
+
+import java.util.Base64;
+
+import com.dy.common.threadPool.ThreadPool;
+
+public class MyThreadJob implements ThreadPool.Job {
+
+	public String imei ;
+	
+	public MyThreadJob(){
+	}
+	public MyThreadJob(String imei){
+		this.imei = imei ;
+	}
+
+	@Override
+	public void execute() throws Exception {
+		testMeterV1_0() ;
+		//testHAC_NBhV2_5() ;
+	}
+	
+	private void testMeterV1_0(){
+		try{
+			RtuData4MeterV1_0 rd = new RtuData4MeterV1_0() ;
+			byte[] bs = rd.create(imei) ;
+			bs = Base64.getEncoder().encode(bs) ;
+			
+			UpDataPayloadVo payloadVo = new UpDataPayloadVo() ;
+			payloadVo.APPdata = new String(bs, "UTF-8") ;
+			
+			UpDataVo vo = new UpDataVo(imei, "8086" + imei ) ;
+			vo.payload = payloadVo ;
+			String json = vo.toJson() ;
+			byte[] bytes = json.getBytes() ;
+			HttpPost.post(bytes);
+		}catch(Exception e){
+			e.printStackTrace();
+		}finally{
+			HttpClUnit.clientOver() ;
+		}
+	}
+	
+	@SuppressWarnings("unused")
+	private void testHAC_NBhV2_5(){
+		try{
+			RtuData4HAC_NBhV2_5 rd = new RtuData4HAC_NBhV2_5() ;
+			byte[] bs = rd.create(imei) ;
+			bs = Base64.getEncoder().encode(bs) ;
+			
+			UpDataPayloadVo payloadVo = new UpDataPayloadVo() ;
+			payloadVo.APPdata = new String(bs, "UTF-8") ;
+			
+			UpDataVo vo = new UpDataVo(imei, "8086" + imei ) ;
+			vo.payload = payloadVo ;
+			String json = vo.toJson() ;
+			byte[] bytes = json.getBytes() ;
+			HttpPost.post(bytes);
+		}catch(Exception e){
+			e.printStackTrace();
+		}finally{
+			HttpClUnit.clientOver() ;
+		}
+	}
+
+	@Override
+	public void destroy() {
+	}
+
+	@Override
+	public boolean isDestroy() {
+		return false;
+	}
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/RtuData4HAC_NBhV2_5.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/RtuData4HAC_NBhV2_5.java
new file mode 100644
index 0000000..52c839f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/RtuData4HAC_NBhV2_5.java
@@ -0,0 +1,46 @@
+package com.dy.testClient.httpCl;
+
+import com.dy.common.util.ByteUtil;
+
+public class RtuData4HAC_NBhV2_5 {
+	public byte[] create(String imei) throws Exception{
+		/*
+		 * 0101
+		 * 00
+		 * 02
+		 * 4643
+		 * 3C
+		 * 00BE
+		 * FF
+		 * 86AB62626E642F332F30026A313233343536373839300D1A64B8FCE60E655554432B3801634E42680719016E110112655056332E30136C56332E30345F32323034323214001701A762626E652F38302F3001020600101A00000000171A00000000181A1A00000000181F00A462626E652F38312F30030101000201A462626E652F38322F30000001000200A262626E652F38342F30001A00015180A462626E652F39392F30016F3836333331383036303136393235390D3903010E390013
+		 * EA77
+		 * 
+		 */
+		String hex = "0101024570753C001AFFA30D1B000001898AB2E3160E655554432B3862626E642F332F303190" ;
+		//String hex = "0101000246433C00BEFF86AB62626E642F332F30026A313233343536373839300D1A64B8FCE60E655554432B3801634E42680719016E110112655056332E30136C56332E30345F32323034323214001701A762626E652F38302F3001020600101A00000000171A00000000181A1A00000000181F00A462626E652F38312F30030101000201A462626E652F38322F30000001000200A262626E652F38342F30001A00015180A462626E652F39392F30016F3836333331383036303136393235390D3903010E390013EA77" ;
+		return ByteUtil.hex2Bytes(hex) ;
+	}
+	/*
+	 * 
+86AB62626E642F332F30
+026A3132333435363738
+39300D1A64B8FCE60E65
+5554432B3801634E4268
+0719016E110112655056
+332E30136C56332E3034
+5F323230343232140017
+01A762626E652F38302F
+3001020600101A000000
+00171A00000000181A1A
+00000000181F00A46262
+6E652F38312F30030101
+000201A462626E652F38
+322F30000001000200A2
+62626E652F38342F3000
+1A00015180A462626E65
+2F39392F30016F383633
+33313830363031363932
+35390D3903010E390013
+	 */
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/RtuData4MeterV1_0.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/RtuData4MeterV1_0.java
new file mode 100644
index 0000000..daf8340
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/RtuData4MeterV1_0.java
@@ -0,0 +1,165 @@
+package com.dy.testClient.httpCl;
+
+import com.dy.common.mw.protocol.pMeterV1_0_1.ProtocolConstantV1_0_1;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.common.util.CreateRadom;
+import com.dy.common.util.DateTime;
+
+public class RtuData4MeterV1_0 {
+	public byte[] create(String imei) throws Exception{
+		/*
+		 * 68
+		 * 0051
+		 * 01
+		 * 0300000000000001
+		 * 12233445566778
+		 * 01
+		 * 221128152107
+		 * 0001E240
+		 * 000004D2
+		 * 24
+		 * 0129
+		 * 11
+		 * 002D
+		 * 0035
+		 * 003D
+		 * 006E
+		 * 0038
+		 * 00C3
+		 * 00AC
+		 * 004C
+		 * 0028
+		 * 0081
+		 * 001B
+		 * 005E
+		 * 003D
+		 * 0063
+		 * 00AB
+		 * 0071
+		 * 00BB
+		 * 0046
+		 * 004A
+		 * 009B
+		 * 0087
+		 * 00BE
+		 * 0022
+		 * 00B0
+		 * DA
+		 * 16
+		 */
+		int len = 89 ;
+		byte[] bs = new byte[len] ;
+		bs[0] = ProtocolConstantV1_0_1.P_Head_Byte ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, len, 1);//闀垮害
+		bs[3] = (byte)101 ;//鍗忚鐗堟湰鍙�
+		while(true){
+			if(imei.length() >= 16){
+				break ;
+			}else{
+				imei = "0" + imei ;
+			}
+		}
+		ByteUtil.string2BCD_BE(bs, imei, 4) ;//IMEI鍙�
+		
+		String meterNo = "" + (Long.valueOf(imei) + 1);
+		while(true){
+			if(meterNo.length() >= 16){
+				break ;
+			}else{
+				meterNo = "0" + meterNo ;
+			}
+		}
+		ByteUtil.string2BCD_BE(bs, meterNo, 12) ;//姘磋〃鍙�
+		
+		bs[20] = 1 ;//鍔熻兘鐮�
+		
+		ByteUtil.string2BCD_BE(bs, DateTime.yyMMddhhmmss(), 21) ;//鏃堕棿
+		
+		ByteUtilUnsigned.int2Bytes_BE(bs, 123456, 27);//瀹炴椂绱姘撮噺
+		
+		ByteUtilUnsigned.int2Bytes_BE(bs, 54321, 31);//鏃ョ疮璁℃按閲�
+		
+		bs[35] = (byte)36;//鐢垫睜鐢靛帇
+		
+		ByteUtilUnsigned.short2Bytes_BE(bs, 297, 36);//淇″彿寮哄害
+		
+		byte sta = 0 ;
+		int num = CreateRadom.radom_4() ;
+		if(num%2 == 0){
+			sta += 1 ;//闃�闂ㄧ姸鎬�
+		}
+		num = CreateRadom.radom_4() ;
+		if(num%2 == 0){
+			sta += 4 ;//闃�闂ㄦ晠闅�
+		}
+		num = CreateRadom.radom_4() ;
+		if(num%2 == 0){
+			sta += 8 ;//寮虹
+		}
+		num = CreateRadom.radom_4() ;
+		if(num%2 == 0){
+			sta += 16 ;//鐢垫睜娆犲帇
+		}
+		bs[38] = sta;//琛ㄧ姸鎬�
+		
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 39);//1鐐瑰皬鏃剁敤姘撮噺
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 41);//2鐐瑰皬鏃剁敤姘撮噺
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 43);//3
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 45);//4 
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 47);//5
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 49);//6
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 51);//7
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 53);//8
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 55);//9
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 57);//10
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 59);//11
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 61);//12
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 63);//13
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 65);//14
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 67);//15
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 69);//16
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 71);//17
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 73);//18
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 75);//19
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 77);//20
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 79);//21
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 81);//22
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 83);//23
+		num = CreateRadom.radom(200, 10) ;
+		ByteUtilUnsigned.short2Bytes_BE(bs, num, 85);//24
+		
+		byte he = 0 ;
+		for(byte i = 0 ; i <= 86; i++){
+			he = (byte)(he + bs[i]) ;
+		}
+		ByteUtilUnsigned.byte2Byte(bs, he, 87) ;
+		bs[88] = ProtocolConstantV1_0_1.P_Tail_Byte ;
+		
+		return bs ;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/TestBase64.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/TestBase64.java
new file mode 100644
index 0000000..8bdda86
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/TestBase64.java
@@ -0,0 +1,23 @@
+package com.dy.testClient.httpCl;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+
+import com.dy.common.util.ByteUtil;
+
+public class TestBase64 {
+
+	public static void main(String[] args) throws UnsupportedEncodingException{
+		String hex1 = "6838363235393230353934333439373000002002303231310000000000000032003005002E000000000001000000000200000000032101010012330400300521010100123306016907016908000009FF0000FC16" ;
+		System.out.println(hex1);
+		byte[] bs = ByteUtil.hex2Bytes(hex1) ;
+		bs = Base64.getEncoder().encode(bs) ;
+		String base64 = new String(bs, "UTF-8") ;
+		System.out.println(base64);
+		
+		bs = Base64.getDecoder().decode(base64);
+		String hex2 = ByteUtil.bytes2Hex(bs, false) ;
+		System.out.println(hex2);
+
+	}
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/UpDataPayloadVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/UpDataPayloadVo.java
new file mode 100644
index 0000000..8e1e7ff
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/UpDataPayloadVo.java
@@ -0,0 +1,16 @@
+package com.dy.testClient.httpCl;
+
+public class UpDataPayloadVo {
+	
+	public String APPdata ;
+	
+	
+	public String getAPPdata() {
+		return APPdata;
+	}
+
+	public void setAPPdata(String aPPdata) {
+		APPdata = aPPdata;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/UpDataVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/UpDataVo.java
new file mode 100644
index 0000000..88f1e19
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/httpCl/UpDataVo.java
@@ -0,0 +1,174 @@
+package com.dy.testClient.httpCl;
+
+
+import com.alibaba.fastjson2.JSON;
+
+public class UpDataVo {
+	
+	public Integer upPacketSN; //:-1,
+	public Integer upDataSN; //:-1,
+	public String topic; //:"v1/up/ad",
+	public Long timestamp; //:1667302244541,
+	public String tenantId; //:"2000114347",
+	public String serviceId; //:"",
+	public String protocol; //:"lwm2m",
+	public String productId; //:"15410798",
+	public UpDataPayloadVo payload; //:{"APPdata":"pQAYWhAGFQEmECIgETMgIQEBACASARckZFoAAFeq"},
+	public String messageType; //:"dataReport",
+	public String deviceType; //:"",
+	public String deviceId; //:"59a4d90bf7a04aeea4d3523fe15d6f3f",
+	public String assocAssetId; //:"",
+	public String imsi; //:"undefined",
+	public String imei; //:"862592059434970"
+	
+	public UpDataVo(String imei, String deviceId){
+		this.upPacketSN = - 1 ;
+		this.upDataSN = - 1 ;
+		this.topic = "v1/up/ad" ;
+		this.timestamp = System.currentTimeMillis() ;
+		this.tenantId = "2000114347" ;
+		this.serviceId = "" ;
+		this.protocol = "lwm2m" ;
+		this.productId = "15410798" ;
+		this.messageType = "dataReport" ;
+		this.deviceType = "" ;
+		this.deviceId = deviceId ;
+		this.assocAssetId = "" ;
+		this.imsi = "" ;
+		this.imei = imei ;
+	}
+	
+	public String toString(){
+		StringBuffer sb = new StringBuffer() ;
+		sb.append("\nproductId锛�" + productId + "\n") ;
+		sb.append("deviceId锛�" + deviceId + "\n") ;
+		sb.append("imei锛�" + imei + "\n") ;
+		sb.append("payload锛�" + (payload==null?"":payload.APPdata) + "\n") ;
+		sb.append("timestamp锛�" + timestamp + "\n") ;
+		return sb.toString() ;
+	}
+	
+	/**
+	 * 瀵硅薄杞垚json
+	 * @return json
+	 * @throws Exception 寮傚父
+	 */
+	public String toJson()throws Exception{
+		try{
+			return JSON.toJSONString(this) ;
+			//return new JSONSerializer().exclude(new String[]{"class", "*.class"}).deepSerialize(this);
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+	/**
+	 * json杞垚瀵硅薄
+	 * @param json json
+	 * @return 瀵硅薄
+	 * @throws Exception 寮傚父
+	 */
+	public static UpDataVo jsonToObject(String json)throws Exception{
+		try{
+			return JSON.parseObject(json, UpDataVo.class) ;
+			//return new JSONDeserializer<UpDataVo>()
+			//		.use("payload", UpDataPayloadVo.class)
+			//		.deserialize(json, UpDataVo.class) ;
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+
+
+	public Integer getUpPacketSN() {
+		return upPacketSN;
+	}
+	public void setUpPacketSN(Integer upPacketSN) {
+		this.upPacketSN = upPacketSN;
+	}
+	public Integer getUpDataSN() {
+		return upDataSN;
+	}
+	public void setUpDataSN(Integer upDataSN) {
+		this.upDataSN = upDataSN;
+	}
+	public String getTopic() {
+		return topic;
+	}
+	public void setTopic(String topic) {
+		this.topic = topic;
+	}
+	public Long getTimestamp() {
+		return timestamp;
+	}
+	public void setTimestamp(Long timestamp) {
+		this.timestamp = timestamp;
+	}
+	public String getTenantId() {
+		return tenantId;
+	}
+	public void setTenantId(String tenantId) {
+		this.tenantId = tenantId;
+	}
+	public String getServiceId() {
+		return serviceId;
+	}
+	public void setServiceId(String serviceId) {
+		this.serviceId = serviceId;
+	}
+	public String getProtocol() {
+		return protocol;
+	}
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+	public String getProductId() {
+		return productId;
+	}
+	public void setProductId(String productId) {
+		this.productId = productId;
+	}
+	public UpDataPayloadVo getPayload() {
+		return payload;
+	}
+	public void setPayload(UpDataPayloadVo payload) {
+		this.payload = payload;
+	}
+	public String getMessageType() {
+		return messageType;
+	}
+	public void setMessageType(String messageType) {
+		this.messageType = messageType;
+	}
+	public String getDeviceType() {
+		return deviceType;
+	}
+	public void setDeviceType(String deviceType) {
+		this.deviceType = deviceType;
+	}
+	public String getDeviceId() {
+		return deviceId;
+	}
+	public void setDeviceId(String deviceId) {
+		this.deviceId = deviceId;
+	}
+	public String getAssocAssetId() {
+		return assocAssetId;
+	}
+	public void setAssocAssetId(String assocAssetId) {
+		this.assocAssetId = assocAssetId;
+	}
+	public String getIMSI() {
+		return imsi;
+	}
+	public void setIMSI(String iMSI) {
+		imsi = iMSI;
+	}
+	public String getIMEI() {
+		return imei;
+	}
+	public void setIMEI(String iMEI) {
+		imei = iMEI;
+	}
+	
+	
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/Code.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/Code.java
new file mode 100644
index 0000000..4fcd76b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/Code.java
@@ -0,0 +1,15 @@
+package com.dy.testClient.rmiClient;
+
+public class Code {
+
+	public static String cd1 = "001" ;//娉ㄥ唽
+	
+	public static String cd2 = "002" ;//璇锋眰sepTest鐨勯厤缃�
+	
+	public static String cd3 = "003" ;//璇锋眰寮�濮嬪伐浣�
+	
+	public static String cd4 = "004" ;//鍚戞湇鍔$涓婃姤淇℃伅
+	
+	public static String cd5 = "005" ;//鍚戞湇鍔$涓婃姤  鏁版嵁涓婃姤宸ヤ綔宸茬粡瀹屾垚
+	
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java
new file mode 100644
index 0000000..c3affa5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java
@@ -0,0 +1,84 @@
+package com.dy.testClient.rmiClient;
+
+import com.alibaba.fastjson2.JSON;
+
+public class ResConfigVo {
+	//妯℃嫙瀹㈡埛鐨凴tuAddr璧峰鍙�
+	public Long rtuAddrStart = 0L ;
+	//妯℃嫙瀹㈡埛鐨処MEI鍙锋埅姝㈠彿
+	public Long rtuAddrEnd = 0L ;
+	//鏈嶅姟绔疘P
+	public String serverIp = "" ;
+	//鏈嶅姟绔笂涓嬫枃
+	public Integer serverPort = 0 ;
+	//鍙戦�佹暟鎹鏁�
+	public Integer sendTimes = 0 ;
+	
+	/**
+	 * 瀵硅薄杞垚json
+	 * @return 瀵硅薄json
+	 * @throws Exception 寮傚父
+	 */
+	public String toJson()throws Exception{
+		try{
+			return JSON.toJSONString(this) ;
+			//return new JSONSerializer().exclude(new String[]{"class", "*.class"}).deepSerialize(this);
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+	/**
+	 * json杞垚瀵硅薄
+	 * @param json json
+	 * @return 瀵硅薄
+	 * @throws Exception 寮傚父
+	 */
+	public static ResConfigVo jsonToObject(String json)throws Exception{
+		try{
+			return JSON.parseObject(json, ResConfigVo.class) ;
+			//return new JSONDeserializer<ResConfigVo>().deserialize(json, ResConfigVo.class) ;
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+
+	public Long getRtuAddrStart() {
+		return rtuAddrStart;
+	}
+
+	public void setRtuAddrStart(Long rtuAddrStart) {
+		this.rtuAddrStart = rtuAddrStart;
+	}
+
+	public Long getRtuAddrEnd() {
+		return rtuAddrEnd;
+	}
+
+	public void setRtuAddrEnd(Long rtuAddrEnd) {
+		this.rtuAddrEnd = rtuAddrEnd;
+	}
+
+	public String getServerIp() {
+		return serverIp;
+	}
+
+	public void setServerIp(String serverIp) {
+		this.serverIp = serverIp;
+	}
+
+	public Integer getServerPort() {
+		return serverPort;
+	}
+
+	public void setServerPort(Integer serverPort) {
+		this.serverPort = serverPort;
+	}
+
+	public Integer getSendTimes() {
+		return sendTimes;
+	}
+
+	public void setSendTimes(Integer sendTimes) {
+		this.sendTimes = sendTimes;
+	}
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResRegisterVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResRegisterVo.java
new file mode 100644
index 0000000..3977070
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResRegisterVo.java
@@ -0,0 +1,45 @@
+package com.dy.testClient.rmiClient;
+
+import com.alibaba.fastjson2.JSON;
+
+public class ResRegisterVo {
+	
+	public String token ;
+
+	/**
+	 * 瀵硅薄杞垚json
+	 * @return json
+	 * @throws Exception 寮傚父
+	 */
+	public String toJson()throws Exception{
+		try{
+			return JSON.toJSONString(this) ;
+			//return new JSONSerializer().exclude(new String[]{"class", "*.class"}).deepSerialize(this);
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+	/**
+	 * json杞垚瀵硅薄
+	 * @param json json
+	 * @return 瀵硅薄
+	 * @throws Exception 寮傚父
+	 */
+	public static ResRegisterVo jsonToObject(String json)throws Exception{
+		try{
+			return JSON.parseObject(json, ResRegisterVo.class) ;
+			//return new JSONDeserializer<ResRegisterVo>().deserialize(json, ResRegisterVo.class) ;
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+
+	public String getToken() {
+		return token;
+	}
+
+	public void setToken(String id) {
+		this.token = id;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResStartVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResStartVo.java
new file mode 100644
index 0000000..12f2ca6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResStartVo.java
@@ -0,0 +1,47 @@
+package com.dy.testClient.rmiClient;
+
+
+import com.alibaba.fastjson2.JSON;
+
+public class ResStartVo {
+
+	public boolean start ;
+	
+	
+	/**
+	 * 瀵硅薄杞垚json
+	 * @return json
+	 * @throws Exception 寮傚父
+	 */
+	public String toJson()throws Exception{
+		try{
+			return JSON.toJSONString(this) ;
+			//return new JSONSerializer().exclude(new String[]{"class", "*.class"}).deepSerialize(this);
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+	/**
+	 * json杞垚瀵硅薄
+	 * @param json json
+	 * @return 瀵硅薄
+	 * @throws Exception 寮傚父
+	 */
+	public static ResStartVo jsonToObject(String json)throws Exception{
+		try{
+			return JSON.parseObject(json, ResStartVo.class) ;
+			//return new JSONDeserializer<ResStartVo>().deserialize(json, ResStartVo.class) ;
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+
+	public boolean isStart() {
+		return start;
+	}
+
+	public void setStart(boolean start) {
+		this.start = start;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java
new file mode 100644
index 0000000..8d30bb8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java
@@ -0,0 +1,268 @@
+package com.dy.testClient.rmiClient;
+
+import com.dy.testClient.ServerProperties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import com.dy.common.mw.UnitAdapterInterface;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.mw.UnitStartedCallbackInterface;
+import com.dy.common.mw.channel.rmi.RmiFrameWork;
+
+public class RmiClUnit  implements UnitInterface {
+
+	private static final Logger log = LogManager.getLogger(RmiClUnit.class) ;
+	
+	private static final String id = "" + System.nanoTime() ;//鑷繁鐨刬d
+	
+	public static String token ;//鏈嶅姟绔彂鐨則oken
+	
+	private static final RmiClUnit instance = new RmiClUnit() ;
+	
+	private static RmiFrameWork frmWork = null ;
+	
+	public static RmiClUnitAdapter adapter ;
+	public static RmiClUnitConfigVo confVo ;
+	
+	private RmiClUnit(){}
+	
+	public static RmiClUnit getInstance(){
+		return instance ;
+	}
+	
+	@Override
+	public void setAdapter(UnitAdapterInterface adapter) throws Exception {
+		if(adapter == null){
+			throw new Exception("Rmi Client妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ;
+		}
+		RmiClUnit.adapter = (RmiClUnitAdapter)adapter ; 
+		RmiClUnit.confVo = RmiClUnit.adapter.getConfig() ;
+		if(RmiClUnit.confVo == null){
+			throw new Exception("Rmi Client妯″潡閰嶇疆瀵硅薄涓嶈兘涓虹┖锛�") ;
+		}
+	}
+
+	@Override
+	public void start(UnitStartedCallbackInterface callback) throws Exception {
+		System.out.println("Rmi Client妯″潡鎴愬姛鍚姩");
+		this.doStart();
+	    callback.call(null) ;
+	}
+
+	@Override
+	public void stop(UnitStartedCallbackInterface callback) throws Exception {
+		callback.call(null);
+	}
+	
+	private void doStart(){
+		new Thread(() -> {
+			while(true){
+				try {
+					Thread.sleep(100L);
+					frmWork = getRmiFrameWork() ;
+					if(frmWork != null){
+						break ;
+					}
+				} catch (Exception e) {
+					log.error("寰楀埌rmiFramWork澶辫触" + e.getMessage());
+					continue ;
+				}
+			}
+			register(frmWork) ;
+		}).start();
+	}
+	
+	public RmiFrameWork getRmiFrameWork(){
+		RmiClient rmiCl = new RmiClient(confVo.svUrl, confVo.svPort, confVo.svContext) ;
+		return rmiCl.getRmiInterface() ;
+	}
+	
+	//鎶婁笂鎶ユ暟鎹殑鏁伴噺涓婃姤缁檓wTestServer
+	public void reportHadReportCount(Integer count){
+		try {
+			Thread.sleep(100L);
+			RmiRequestVo rqVo = new RmiRequestVo() ;
+			rqVo.id = id ;
+			rqVo.token = token ;
+			rqVo.code = Code.cd4 ;
+			rqVo.count = count ;
+			String json = rqVo.toJson() ;
+			frmWork.syncRequest(json) ;
+		} catch (Exception e) {
+			log.error("鎶婁笂鎶ユ暟鎹殑鏁伴噺涓婃姤缁檓wTestServer澶辫触" + e.getMessage());
+		}
+	}
+	
+	//鎶婃暟鎹笂鎶ュ畬鎴愭儏鍐�  涓婃姤缁檓wTestServer
+	public void reportHadReportOver(Long seconds){
+		try {
+			Thread.sleep(100L);
+			RmiRequestVo rqVo = new RmiRequestVo() ;
+			rqVo.id = id ;
+			rqVo.token = token ;
+			rqVo.code = Code.cd5 ;
+			rqVo.over = true ;
+			rqVo.seconds = seconds ;
+			String json = rqVo.toJson() ;
+			frmWork.syncRequest(json) ;
+		} catch (Exception e) {
+			log.error("鎶婃暟鎹笂鎶ュ畬鎴愭儏鍐�  涓婃姤缁檓wTestServer澶辫触" + e.getMessage());
+		}
+	}
+	
+	//鍚憁wTestServer娉ㄥ唽
+	private void register(RmiFrameWork frmWork){
+		boolean error = false ;
+		while(true){
+			try {
+				Thread.sleep(100L);
+				RmiRequestVo rqVo = new RmiRequestVo() ;
+				rqVo.id = id ;
+				rqVo.code = Code.cd1 ;
+				String json = rqVo.toJson() ;
+				Object rObj = frmWork.syncRequest(json) ;
+				if(rObj != null){
+					RmiResponseVo rspVo = RmiResponseVo.jsonToObject(String.valueOf(rObj), ResRegisterVo.class) ;
+					if(rspVo != null){
+						if(rspVo.success){
+							if(rspVo.obj != null && rspVo.obj instanceof ResRegisterVo){
+								ResRegisterVo rVo = (ResRegisterVo)rspVo.obj ;
+								token = rVo.token ;
+								log.info("娉ㄥ唽鎴愬姛锛屽緱鍒皌oken=" + token);
+								break ;
+							}else{
+								log.error("rmi娉ㄥ唽澶辫触锛氭湇鍔$杩斿洖ResRegisterVo涓簄ull");
+								error = true ;
+							}
+						}else{
+							log.error("rmi娉ㄥ唽澶辫触锛氭湇鍔$杩斿洖閿欒锛�" + rspVo.errorInfo);
+							error = true ;
+						}
+					}else{
+						log.error("rmi娉ㄥ唽澶辫触锛氭湇鍔$杩斿洖鐨凴miResponseVo涓簄ull");
+						error = true ;
+					}
+				}else{
+					log.error("rmi娉ㄥ唽澶辫触锛氭湇鍔$杩斿洖json涓簄ull");
+					error = true ;
+				}
+			} catch (Exception e) {
+				log.error("rmi娉ㄥ唽澶辫触" + e.getMessage());
+				error = true ;
+				continue ;
+			}
+		}
+		if(!error){
+			getConfig(frmWork) ;
+		}
+	}
+	
+	//浠巑wTestServer寰楀埌閰嶇疆
+	private void getConfig(RmiFrameWork frmWork){
+		boolean error = false ;
+		while(true){
+			try {
+				Thread.sleep(100L);
+				RmiRequestVo rqVo = new RmiRequestVo() ;
+				rqVo.id = id ;
+				rqVo.token = token ;
+				rqVo.code = Code.cd2 ;
+				String json = rqVo.toJson() ;
+				Object rObj = frmWork.syncRequest(json) ;
+				if(rObj != null){
+					RmiResponseVo rspVo = RmiResponseVo.jsonToObject(String.valueOf(rObj), ResConfigVo.class) ;
+					if(rspVo != null){
+						if(rspVo.success){
+							if(rspVo.obj != null && rspVo.obj instanceof ResConfigVo){
+								ResConfigVo rVo = (ResConfigVo)rspVo.obj ;
+								if(rVo != null){
+									ServerProperties.rtuAddrStart = rVo.rtuAddrStart;
+									ServerProperties.rtuAddrEnd = rVo.rtuAddrEnd;
+									ServerProperties.serverIp = rVo.serverIp;
+									ServerProperties.serverPort = rVo.serverPort;
+									ServerProperties.sendTimes = rVo.sendTimes ;
+									log.info("寰楀埌閰嶇疆鎴愬姛");
+									log.info("    寮�濮婻tuAddr=" + ServerProperties.rtuAddrStart);
+									log.info("    鎴RtuAddr=" + ServerProperties.rtuAddrEnd);
+									log.info("    mwAccept鏈嶅姟IP=" + ServerProperties.serverIp);
+									log.info("    mwAccept鏈嶅姟绔彛=" + ServerProperties.serverPort);
+									log.info("    姣廼mei涓婃姤鏁版嵁娆℃暟=" + ServerProperties.sendTimes);
+									break ;
+								}else{
+									log.error("rmi寰楀埌閰嶇疆澶辫触锛歫son杞琑esConfigVo涓簄ull");
+									error = true ;
+								}
+							}else{
+								log.error("rmi寰楀埌閰嶇疆澶辫触锛氭湇鍔$杩斿洖ResConfigVo涓簄ull");
+								error = true ;
+							}
+						}else{
+							log.error("rmi寰楀埌閰嶇疆澶辫触锛氭湇鍔$杩斿洖閿欒锛�" + rspVo.errorInfo);
+							error = true ;
+						}
+					}else{
+						log.error("rmi寰楀埌閰嶇疆澶辫触锛氭湇鍔$杩斿洖鐨凴miResponseVo涓簄ull");
+						error = true ;
+					}
+				}else{
+					log.error("rmi寰楀埌閰嶇疆澶辫触锛氭湇鍔$杩斿洖json涓簄ull");
+					error = true ;
+				}
+			} catch (Exception e) {
+				log.error("rmi寰楀埌閰嶇疆澶辫触" + e.getMessage());
+				error = true ;
+				continue ;
+			}
+		}
+		if(!error){
+			getStart(frmWork) ;
+		}
+	}
+	
+	//浠巑wTestServer寰楀埌寮�濮嬩笂鎶ユ暟鎹殑璇峰厑璁�
+	private void getStart(RmiFrameWork frmWork){
+		log.info("绛夊緟鏈嶅姟绔厑璁镐笂鎶ユ暟鎹�");
+		while(true){
+			try {
+				Thread.sleep(100L);
+				RmiRequestVo rqVo = new RmiRequestVo() ;
+				rqVo.id = id ;
+				rqVo.token = token ;
+				rqVo.code = Code.cd3 ;
+				String json = rqVo.toJson() ;
+				Object rObj = frmWork.syncRequest(json) ;
+				if(rObj != null){
+					RmiResponseVo rspVo = RmiResponseVo.jsonToObject(String.valueOf(rObj), ResStartVo.class) ;
+					if(rspVo != null){
+						if(rspVo.success){
+							if(rspVo.obj != null && rspVo.obj instanceof ResStartVo){
+								ResStartVo rVo = (ResStartVo)rspVo.obj ;
+								if(rVo != null){
+									if(rVo.start){
+										ServerProperties.startWork = true ;
+										log.info("鍏佽涓婃姤鏁版嵁宸ヤ綔浜�( ^_^ )");
+										break ;
+									}
+								}else{
+									log.error("rmi璇锋眰鍚姩澶辫触锛歫son杞琑esStartVo涓簄ull");
+								}
+							}else{
+								log.error("rmi璇锋眰鍚姩澶辫触锛氭湇鍔$杩斿洖ResStartVo涓簄ull");
+							}
+						}else{
+							log.error("rmi璇锋眰鍚姩澶辫触锛氭湇鍔$杩斿洖閿欒锛�" + rspVo.errorInfo);
+						}
+					}else{
+						log.error("rmi璇锋眰鍚姩澶辫触锛氭湇鍔$杩斿洖鐨凴miResponseVo涓簄ull");
+					}
+				}else{
+					log.error("rmi璇锋眰鍚姩澶辫触锛氭湇鍔$杩斿洖json涓簄ull");
+				}
+			} catch (Exception e) {
+				log.error("rmi璇锋眰鍚姩澶辫触" + e.getMessage());
+				continue ;
+			}
+		}
+	}
+	
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnitAdapter.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnitAdapter.java
new file mode 100644
index 0000000..0c70886
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnitAdapter.java
@@ -0,0 +1,10 @@
+package com.dy.testClient.rmiClient;
+
+import com.dy.common.mw.UnitAdapterInterface;
+
+public interface RmiClUnitAdapter  extends UnitAdapterInterface {
+
+	public RmiClUnitConfigVo getConfig()  ;
+		
+}
+
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnitConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnitConfigVo.java
new file mode 100644
index 0000000..5a64f2f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnitConfigVo.java
@@ -0,0 +1,29 @@
+package com.dy.testClient.rmiClient;
+
+public class RmiClUnitConfigVo {
+	
+	public String svUrl ;
+	public String svContext ;
+	public Integer svPort ;
+	
+	public String getSvUrl() {
+		return svUrl;
+	}
+	public void setSvUrl(String svUrl) {
+		this.svUrl = svUrl;
+	}
+	public String getSvContext() {
+		return svContext;
+	}
+	public void setSvContext(String svContext) {
+		this.svContext = svContext;
+	}
+	public Integer getSvPort() {
+		return svPort;
+	}
+	public void setSvPort(Integer svPort) {
+		this.svPort = svPort;
+	}
+
+	
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClient.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClient.java
new file mode 100644
index 0000000..c78b6ed
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClient.java
@@ -0,0 +1,40 @@
+package com.dy.testClient.rmiClient;
+
+import java.rmi.Naming;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import com.dy.common.mw.channel.rmi.RmiFrameWork;
+
+public class RmiClient {
+
+	private static Logger log = LogManager.getLogger(RmiClient.class.getName()) ;
+
+	private String rmiServerIp;
+	private Integer rmiServerPort;
+	private String rmiServerContext ;
+	
+	public RmiClient(String rmiServerIp, Integer rmiServerPort, String rmiServerContext){
+		this.rmiServerIp = rmiServerIp ;
+		this.rmiServerPort = rmiServerPort ;
+		this.rmiServerContext = rmiServerContext ;
+	}
+	
+	/**
+	 * 寰楀埌涓棿浠禦MI
+	 * @return
+	 */
+	@SuppressWarnings("finally")
+	public RmiFrameWork getRmiInterface() { 
+		String rmiServerUrl = "rmi://" + this.rmiServerIp + ":" + this.rmiServerPort + "/" + this.rmiServerContext ;
+		RmiFrameWork rmiIntf = null;
+		try {
+			rmiIntf = (RmiFrameWork) Naming.lookup(rmiServerUrl);
+		} catch (Exception e) {
+			log.error("杩炴帴RMI鏈嶅姟锛�" + rmiServerUrl + "鏃跺嚭閿欍��", e);
+		} finally {
+			return rmiIntf;
+		}
+	}
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java
new file mode 100644
index 0000000..c21c432
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiRequestVo.java
@@ -0,0 +1,96 @@
+package com.dy.testClient.rmiClient;
+
+import com.alibaba.fastjson2.JSON;
+
+public class RmiRequestVo {
+	
+	public String id ;
+	
+	public String token ;
+	
+	public String code ;
+	
+	public Integer count;//aepTest涓婃姤鏁版嵁鏁伴噺
+	
+	public Boolean over ;//aepTest涓婃姤鏁版嵁缁撴潫
+	
+	public Long seconds ;//aepTest涓婃姤鏁版嵁鐢ㄦ椂(绉�)
+	
+	/**
+	 * 瀵硅薄杞垚json
+	 * @return json
+	 * @throws Exception 寮傚父
+	 */
+	public String toJson()throws Exception{
+		try{
+			return JSON.toJSONString(this) ;
+			//return new JSONSerializer().exclude(new String[]{"class", "*.class"}).deepSerialize(this);
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+	/**
+	 * json杞垚瀵硅薄
+	 * @param json json
+	 * @return 瀵硅薄
+	 * @throws Exception 寮傚父
+	 */
+	public static RmiRequestVo jsonToObject(String json)throws Exception{
+		try{
+			return JSON.parseObject(json, RmiRequestVo.class) ;
+			//JSONDeserializer<RmiRequestVo> jsonD = new JSONDeserializer<RmiRequestVo>() ;
+			//RmiRequestVo rqVo = jsonD.deserialize(json, RmiRequestVo.class) ;
+			//return rqVo ;
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getToken() {
+		return token;
+	}
+
+	public void setToken(String token) {
+		this.token = token;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public Integer getCount() {
+		return count;
+	}
+
+	public void setCount(Integer count) {
+		this.count = count;
+	}
+
+	public Boolean getOver() {
+		return over;
+	}
+
+	public void setOver(Boolean over) {
+		this.over = over;
+	}
+
+	public Long getSeconds() {
+		return seconds;
+	}
+
+	public void setSeconds(Long seconds) {
+		this.seconds = seconds;
+	}
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiResponseVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiResponseVo.java
new file mode 100644
index 0000000..658591a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiResponseVo.java
@@ -0,0 +1,77 @@
+package com.dy.testClient.rmiClient;
+
+import com.alibaba.fastjson2.JSON;
+
+public class RmiResponseVo {
+
+	public boolean success = true ;
+	
+	public String errorInfo ;
+	
+	public String code ;
+	
+	public Object obj ;
+	
+	/**
+	 * 瀵硅薄杞垚json
+	 * @return json
+	 * @throws Exception 寮傚父
+	 */
+	public String toJson()throws Exception{
+		try{
+			return JSON.toJSONString(this) ;
+			//return new JSONSerializer().exclude(new String[]{"class", "*.class"}).deepSerialize(this);
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+	/**
+	 * json杞垚瀵硅薄
+	 * @param json
+	 * @return 瀵硅薄
+	 * @throws Exception 寮傚父
+	 */
+	public static RmiResponseVo jsonToObject(String json, Class<?> clazz)throws Exception{
+		try{
+			return JSON.parseObject(json, RmiResponseVo.class) ;
+			//JSONDeserializer<RmiResponseVo> jsonD = new JSONDeserializer<RmiResponseVo>() ;
+			//jsonD.use("obj", clazz) ;
+			//RmiResponseVo resp = jsonD.deserialize(json, RmiResponseVo.class) ;
+			//return resp ;
+		}catch(Exception e){
+			throw new Exception(e.getMessage() , e ) ;
+		}
+	}
+
+	public boolean isSuccess() {
+		return success;
+	}
+
+	public void setSuccess(boolean success) {
+		this.success = success;
+	}
+
+	public String getErrorInfo() {
+		return errorInfo;
+	}
+
+	public void setErrorInfo(String errorInfo) {
+		this.errorInfo = errorInfo;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public Object getObj() {
+		return obj;
+	}
+
+	public void setObj(Object obj) {
+		this.obj = obj;
+	}
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
new file mode 100644
index 0000000..eee927c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
@@ -0,0 +1,55 @@
+package com.dy.testClient.tcpClient;
+
+import com.dy.common.threadPool.ThreadPool;
+import com.dy.testClient.httpCl.*;
+
+import java.util.Base64;
+
+public class MyThreadJob  implements ThreadPool.Job {
+
+    public String rtuAddr;
+
+    public MyThreadJob(){
+    }
+    public MyThreadJob(String rtuAddr){
+        this.rtuAddr = rtuAddr ;
+    }
+
+    @Override
+    public void execute() throws Exception {
+        testP206V1_0_0() ;
+    }
+
+    private void testP206V1_0_0(){
+        try{
+            RtuData4MeterV1_0 rd = new RtuData4MeterV1_0() ;
+            byte[] bs = rd.create(rtuAddr) ;
+            bs = Base64.getEncoder().encode(bs) ;
+
+            UpDataPayloadVo payloadVo = new UpDataPayloadVo() ;
+            payloadVo.APPdata = new String(bs, "UTF-8") ;
+
+            UpDataVo vo = new UpDataVo(rtuAddr, "8086" + rtuAddr) ;
+            vo.payload = payloadVo ;
+            String json = vo.toJson() ;
+            byte[] bytes = json.getBytes() ;
+            HttpPost.post(bytes);
+        }catch(Exception e){
+            e.printStackTrace();
+        }finally{
+            HttpClUnit.clientOver() ;
+        }
+    }
+
+
+    @Override
+    public void destroy() {
+    }
+
+    @Override
+    public boolean isDestroy() {
+        return false;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java
new file mode 100644
index 0000000..b25512c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java
@@ -0,0 +1,110 @@
+package com.dy.testClient.tcpClient;
+
+import com.dy.common.mw.UnitAdapterInterface;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.mw.UnitStartedCallbackInterface;
+import com.dy.common.threadPool.ThreadPool;
+import com.dy.common.threadPool.TreadPoolFactory;
+import com.dy.testClient.ServerProperties;
+import com.dy.testClient.rmiClient.RmiClUnit;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class TcpClUnit  implements UnitInterface {
+
+    private static final Logger log = LogManager.getLogger(TcpClUnit.class) ;
+
+    private static TcpClUnit instance = new TcpClUnit() ;
+
+    public static TcpClUnitAdapter adapter ;
+    public static TcpClUnitConfigVo confVo ;
+
+    private static ThreadPool.Pool pool ;
+
+    private static Integer totalRunedClientCount = 0;
+    private static Integer totalOverClientCount = 0;
+
+    private static Long startTime = 0L ;
+
+    private TcpClUnit(){} ;
+
+    public static TcpClUnit getInstance(){
+        return instance ;
+    }
+
+    @Override
+    public void setAdapter(UnitAdapterInterface adapter) throws Exception {
+        if(adapter == null){
+            throw new Exception("Tcp Client妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ;
+        }
+        TcpClUnit.adapter = (TcpClUnitAdapter)adapter ;
+        TcpClUnit.confVo = TcpClUnit.adapter.getConfig() ;
+        if(TcpClUnit.confVo == null){
+            throw new Exception("Tcp Client妯″潡閰嶇疆瀵硅薄涓嶈兘涓虹┖锛�") ;
+        }
+    }
+
+    @Override
+    public void start(UnitStartedCallbackInterface callback) throws Exception {
+        pool = TreadPoolFactory.getThreadPoolLong() ;
+        System.out.println("Tcp Client妯″潡鎴愬姛鍚姩");
+        this.doStart();
+        callback.call(null) ;
+    }
+
+    @Override
+    public void stop(UnitStartedCallbackInterface callback) throws Exception {
+        callback.call(null);
+    }
+
+    private void doStart(){
+        new Thread(new Runnable(){
+            @Override
+            public void run() {
+                try {
+                    while(true){
+                        if(!ServerProperties.startWork){
+                            Thread.sleep(100L);
+                        }else{
+                            startTime = System.currentTimeMillis() ;
+                            for(Long addr = ServerProperties.rtuAddrStart; addr <= ServerProperties.rtuAddrEnd; addr++){
+                                totalRunedClientCount++ ;
+                                startClient(addr) ;
+                            }
+                            while(true){
+                                if(totalOverClientCount.longValue() >= totalRunedClientCount.longValue()){
+                                    Long seconds = (System.currentTimeMillis() - startTime)/1000 ;
+                                    RmiClUnit.getInstance().reportHadReportOver(seconds) ;
+                                    System.out.println("鍏辩敤鏃�" + seconds + "绉�");
+                                    break ;
+                                }else{
+                                    Thread.sleep(100L);
+                                }
+                            }
+                            break;
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }).start();
+    }
+
+    private void startClient(Long rtuAddr){
+        try {
+            pool.putJob(new MyThreadJob("" + rtuAddr));
+        } catch (Exception e) {
+            log.error("TcpClUnit.startClient() ", e);
+        }
+    }
+
+
+    public static synchronized void clientOver(){
+        totalOverClientCount++;
+        if(totalOverClientCount % 100 == 0){
+            RmiClUnit.getInstance().reportHadReportCount(totalOverClientCount);
+            System.out.println("宸茬粡鍙戦��" + totalOverClientCount * + "鏉℃暟鎹�");
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnitAdapter.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnitAdapter.java
new file mode 100644
index 0000000..43b6027
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnitAdapter.java
@@ -0,0 +1,7 @@
+package com.dy.testClient.tcpClient;
+
+import com.dy.common.mw.UnitAdapterInterface;
+
+public interface TcpClUnitAdapter extends UnitAdapterInterface {
+    public TcpClUnitConfigVo getConfig() ;
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnitConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnitConfigVo.java
new file mode 100644
index 0000000..0cc19ba
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnitConfigVo.java
@@ -0,0 +1,7 @@
+package com.dy.testClient.tcpClient;
+
+public class TcpClUnitConfigVo {
+    public boolean enable ;
+    public int heartbeatTimes ;
+    public int sendInterval ;
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalCodecFactory.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalCodecFactory.java
new file mode 100644
index 0000000..9f59b93
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalCodecFactory.java
@@ -0,0 +1,35 @@
+package com.dy.testClient.tcpConnect;
+
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.core.session.IoSession;
+
+public class LocalCodecFactory implements ProtocolCodecFactory {
+    private ProtocolEncoder encoder;
+    private ProtocolDecoder decoder;
+
+    public LocalCodecFactory() {
+        encoder = new LocalEncoder();
+        decoder = new LocalDecoder();
+    }
+
+    /**
+     * 寰楀埌鍗忚缂栫爜鍣�
+     * @param ioSession 缃戠粶浼氳瘽
+     * @return 鍗忚缂栫爜鍣�
+     */
+    @Override
+    public ProtocolEncoder getEncoder(IoSession ioSession) {
+        return encoder;
+    }
+    /**
+     * 寰楀埌鍗忚瑙g爜鍣�
+     * @param ioSession 缃戠粶浼氳瘽
+     * @return 鍗忚瑙g爜鍣�
+     */
+    @Override
+    public ProtocolDecoder getDecoder(IoSession ioSession) {
+        return decoder;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalDecoder.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalDecoder.java
new file mode 100644
index 0000000..05aad53
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalDecoder.java
@@ -0,0 +1,91 @@
+package com.dy.testClient.tcpConnect;
+import java.io.*;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+
+import com.am.cs12.command.*;
+
+public class LocalDecoder extends CumulativeProtocolDecoder {
+
+    private static final String DECODER_STATE_KEY = LocalDecoder.class.getName() + ".STATE";
+
+    public static final int MAX_SIZE = 2147483647 ;
+
+    private class DecoderState {
+        Command com;
+    }
+
+    /**
+     * 瀵圭綉缁滀紶杈撴潵鐨勬暟鎹繘琛岃В鐮�
+     */
+    protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws IOException, Exception{
+        //浠庝細璇濅腑寰楀埌宸茬粡瑙g爜鐨勬暟鎹�
+        DecoderState decoderState = (DecoderState) session.getAttribute(DECODER_STATE_KEY);
+        if (decoderState == null) {
+            decoderState = new DecoderState();
+            session.setAttribute(DECODER_STATE_KEY, decoderState);
+        }
+        if (decoderState.com == null) {
+            //璇曠潃璇诲彇鍛戒护鍖哄煙鏁版嵁
+            //MAX_IMAGE_SIZE 鐩殑鏄槻姝㈠ぇ鏁版嵁閲忔敾鍑�
+            if (in.prefixedDataAvailable(4, MAX_SIZE)) {
+                decoderState.com = readCommand(in);
+            } else {
+                //鍛戒护鍖哄煙鏃犺冻澶熺殑鏁版嵁
+                return false;
+            }
+        }
+        if (decoderState.com != null) {
+            //璇曠潃璇诲彇鏁版嵁(鏂囦欢)鍖哄煙鏁版嵁
+            //MAX_IMAGE_SIZE 鐩殑鏄槻姝㈠ぇ鏁版嵁閲忔敾鍑�
+            if (in.prefixedDataAvailable(4, MAX_SIZE)) {
+                byte[] bs = getDataBytes(in);
+                MinaData minaCom = new MinaData() ;
+                minaCom.setCom(decoderState.com) ;
+                minaCom.setAttachment(bs) ;
+                out.write(minaCom);
+
+                decoderState.com = null;
+                return true;
+            } else {
+                //鏁版嵁(鏂囦欢)鍖哄煙鏃犺冻澶熺殑鏁版嵁
+                return false;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 璇诲彇Command鍛戒护
+     * @param in
+     * @return
+     * @throws IOException
+     */
+    private Command readCommand(IoBuffer iob) throws IOException , Exception{
+        int length = iob.getInt();
+        byte[] bytes = new byte[length];
+        iob.get(bytes);
+        Command	com = new Command().toObject(bytes);
+        return com;
+    }
+
+    /**
+     * 寰楀埌鏁版嵁鍩熸暟鎹殑瀛楄妭鏁扮粍
+     * @param in
+     * @return
+     * @throws IOException
+     */
+    private byte[] getDataBytes(IoBuffer iob) throws IOException {
+        int length = iob.getInt();
+        if(length == 0){
+            return null ;
+        }
+        byte[] bytes = new byte[length];
+        iob.get(bytes);
+        return bytes ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalEncoder.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalEncoder.java
new file mode 100644
index 0000000..f895d68
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/LocalEncoder.java
@@ -0,0 +1,51 @@
+package com.dy.testClient.tcpConnect;
+
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
+
+import java.io.*;
+
+public class LocalEncoder extends ProtocolEncoderAdapter {
+
+    /**
+     * 瀵规暟鎹繘琛岀紪鐮侊紝浠ュ缃戠粶浼犺緭
+     */
+    public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws IOException, Exception{
+        MinaData minaData = null ;
+        if(message instanceof Command){
+            minaData = new MinaData() ;
+            minaData.setCom((Command)message) ;
+        }else{
+            minaData = (MinaData) message;
+        }
+        byte[] bytes1 = getCommandBytes(minaData.getCom());
+        byte[] bytes2 = minaData.getAttachment() ;
+        int capacity = (bytes1==null?0:bytes1.length) + (bytes2==null?0:bytes2.length) + 8;
+        IoBuffer buffer = IoBuffer.allocate(capacity, false);
+        buffer.putInt(bytes1.length);
+        buffer.put(bytes1);
+        if(bytes2 == null){
+            buffer.putInt(0);
+        }else{
+            buffer.putInt(bytes2.length);
+            buffer.put(bytes2);
+        }
+        buffer.flip();
+        out.write(buffer);
+    }
+
+    /**
+     * 灏嗗懡浠よ浆鎹㈡垚瀛楄妭鏁扮粍
+     * @param com
+     * @return
+     * @throws IOException
+     * @throws Exception
+     */
+    private byte[] getCommandBytes(Command com) throws IOException, Exception {
+        String xml = com.toXml() ;
+        byte[] bytes = xml.getBytes() ;
+        return bytes ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaConnect.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaConnect.java
new file mode 100644
index 0000000..2d85f19
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaConnect.java
@@ -0,0 +1,55 @@
+package com.dy.testClient.tcpConnect;
+
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.session.IoSession;
+
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.transport.socket.SocketConnector;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+
+import java.net.InetSocketAddress;
+
+public class MinaConnect {
+
+    /**
+     * 鍒ゆ柇浼氳瘽鏄惁鏈夋晥
+     * @param se 缃戠粶浼氳瘽
+     * @return 鏄惁杩炴帴
+     */
+    protected boolean isConnected(IoSession se) {
+        return (se != null && se.isConnected());
+    }
+
+    /**
+     * 鍒涘缓鏂颁細璇�
+     * @param host 鏈嶅姟鍣║RI
+     * @param port 鏈嶅姟鍣ㄧ鍙�
+     * @return 缃戠粶浼氳瘽
+     */
+    protected IoSession createSession(String host , int port , int connectTimeout , MinaHandler handler) throws Exception{
+        SocketConnector connector = new NioSocketConnector();
+        connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new LocalCodecFactory()));
+        connector.setHandler(handler);
+        ConnectFuture connectFuture = connector.connect(new InetSocketAddress(host, port));
+        connectFuture.awaitUninterruptibly(connectTimeout);
+        IoSession se = connectFuture.getSession();
+        return se ;
+    }
+
+
+    /**
+     * 鍏抽棴浼氳瘽鑱旀帴
+     * @param se
+     * @param connectTimeout
+     */
+    protected void disconnect(IoSession se , int connectTimeout) {
+        if (se != null) {
+            try{
+                se.closeNow().awaitUninterruptibly(connectTimeout);
+            }catch(Exception e){
+            }finally{
+                se = null;
+            }
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaConnectPool.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaConnectPool.java
new file mode 100644
index 0000000..0f3321f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaConnectPool.java
@@ -0,0 +1,107 @@
+package com.dy.testClient.tcpConnect;
+
+import java.util.*;
+import org.apache.mina.core.session.IoSession;
+
+
+public class MinaConnectPool {
+    /**
+     * 绌洪棽浼氳瘽鐨勬睜(Hashtable鏄嚎绋嬪畨鍏ㄧ殑)
+     */
+    private static Hashtable<String , Vector<IoSession>> freeSessions = new Hashtable<String ,Vector<IoSession>>();
+
+    /**
+     * 浠庝細璇濇睜涓緱鍒扮┖闂茬殑浼氳瘽锛屽鏋滄病鏈夌┖闂茬殑浼氳瘽锛屾湰鐫�蹇�熷弽搴旂殑鍘熷垯锛屾柊寤轰竴涓細璇濓紝涓嶅啀绛夊緟绻佸繖浼氳瘽鐨勯噴鏀�
+     * @param host
+     * @param port
+     * @return
+     * @throws Exception
+     */
+    public static IoSession getSession(String host , int port , int connectTimeout) throws Exception{
+        Vector<IoSession> vecter = freeSessions.get(getKey(host , port)) ;
+        if(vecter == null){
+            vecter = new Vector<IoSession>() ;
+            freeSessions.put(getKey(host , port), vecter) ;
+        }
+
+        MinaConnect con = new MinaConnect() ;
+
+        IoSession se = popSession(vecter , con) ;
+        if(se == null){
+            MinaHandler handler = new MinaHandler(connectTimeout) ;
+            se = createNewSession(host, port, connectTimeout, con, handler) ;
+        }
+        return se ;
+    }
+
+    /**
+     * 灏嗕細璇濇斁鍥炴睜涓�
+     * @param host
+     * @param port
+     * @param se
+     */
+    public static void freeSession(String host , int port , IoSession se){
+        if(se == null){
+            return ;
+        }
+        Vector<IoSession> vecter = freeSessions.get(getKey(host , port)) ;
+        if(vecter == null){
+            vecter = new Vector<IoSession>() ;
+            freeSessions.put(getKey(host , port), vecter) ;
+        }
+        putSession(vecter, se) ;
+    }
+
+    /**
+     * 浠庝細璇濇睜涓彇寰楃┖闂茬殑浼氳瘽
+     * @param vecter
+     * @return
+     */
+    private static IoSession popSession(Vector<IoSession> vecter , MinaConnect con){
+        IoSession se = null ;
+        while(se == null && !vecter.isEmpty()){
+            se = (IoSession)vecter.firstElement() ;
+            if(se != null){
+                vecter.removeElementAt(0) ;
+            }
+            if(!con.isConnected(se)){
+                se = null ;
+            }
+        }
+        return se ;
+    }
+
+    /**
+     * 鏀炬柊浼氳瘽
+     * @param vecter
+     * @param se
+     */
+    private static void putSession(Vector<IoSession> vecter , IoSession se){
+        vecter.addElement(se) ;
+    }
+
+    /**
+     * 鍒涘缓鏂颁細璇�
+     * @param host
+     * @param port
+     * @param connectTimeout
+     * @param con
+     * @return
+     * @throws Exception
+     */
+    private static IoSession createNewSession(String host , int port , int connectTimeout, MinaConnect con , MinaHandler handler) throws Exception{
+        return con.createSession(host, port, connectTimeout , handler) ;
+    }
+
+    /**
+     * 寰楀埌浼氳瘽姹犵殑key
+     * @param url
+     * @param port
+     * @return
+     */
+    private static String getKey(String host , int port){
+        return host + port ;
+    }
+
+}
+
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaHandler.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaHandler.java
new file mode 100644
index 0000000..8749cca
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpConnect/MinaHandler.java
@@ -0,0 +1,94 @@
+package com.dy.testClient.tcpConnect;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+
+public class MinaHandler extends IoHandlerAdapter {
+
+    private static Logger log = LogManager.getLogger(MinaHandler.class.getName()) ;
+
+    private Object synObj ;
+    private int connectTimeout ;
+    private MinaData minaData ;
+
+    public MinaHandler( int connectTimeout){
+        this.connectTimeout = connectTimeout ;
+        this.synObj = new Object() ;
+    }
+
+    /**
+     * 鍙戦�佸懡浠�
+     * @param session
+     * @param minaData
+     */
+    public void sendCommand(IoSession session, MinaData minaData){
+        session.write(minaData) ;
+    }
+
+    /**
+     * 鍙栧緱鍛戒护缁撴灉
+     * @param waitTimeout
+     */
+    public MinaData getAnswer(int waitTimeout){
+        synchronized (synObj) {
+            try {
+                synObj.wait(waitTimeout);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+        return this.minaData;
+    }
+
+
+
+    @Override
+    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
+        new MinaConnect().disconnect(session, this.connectTimeout) ;
+        log.error(cause.getMessage()) ;
+    }
+
+    @Override
+    public void messageReceived(IoSession session, Object message) throws Exception {
+        this.minaData = (MinaData) message;
+        synchronized (synObj) {
+            if (synObj != null) {
+                synObj.notifyAll();
+            }
+        }
+    }
+
+    @Override
+    public void messageSent(IoSession session, Object message) throws Exception {
+        super.messageSent(session, message);
+        log.info("鍛戒护宸茬粡鍙戦�併��") ;
+    }
+
+    @Override
+    public void sessionClosed(IoSession session) throws Exception {
+        super.sessionClosed(session);
+        log.info("缃戠粶浼氳瘽宸茬粡鍏抽棴銆�") ;
+    }
+
+    @Override
+    public void sessionCreated(IoSession session) throws Exception {
+        super.sessionCreated(session);
+        log.info("缃戠粶浼氳瘽宸茬粡鍒涘缓銆�") ;
+    }
+
+    @Override
+    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
+        super.sessionIdle(session, status);
+    }
+
+    @Override
+    public void sessionOpened(IoSession session) throws Exception {
+        super.sessionOpened(session);
+        log.info("缃戠粶浼氳瘽宸茬粡鎵撳紑銆�") ;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/Config.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/Config.xml
new file mode 100644
index 0000000..aec0502
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/Config.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config>
+	<server name="RTU娴嬭瘯瀹㈡埛绔�" showStartInfo="true" company="http://www.dyjs.com"/>
+	<!--
+    鏀寔妯″潡
+    鐭伐浣滄椂闀跨嚎绋嬫睜锛岀嚎绋嬭礋璐g敤鏃惰緝鐭殑宸ヤ綔浠诲姟
+    short_maxThread锛� 姹犱腑鏈�澶х嚎绋嬫暟涓烘墍鏈塁PU鏍告暟+1锛坰hort姹犱笌long姹犲悇鍒嗕竴鍗婏級锛岃嫢涓�-1锛屼笉鍙楅檺鍒� 锛岃缃负0锛岃〃绀轰笉鍚姩绾跨▼姹�
+    short_minThread锛� 姹犱腑鏈�灏忕嚎绋嬫暟锛岃嫢涓�-1锛屼笉鍙楅檺鍒讹紝璁剧疆涓�0锛岃〃绀轰笉鍚姩绾跨▼姹�
+    short_freeTimeout锛� 绾跨▼鏁扮┖闂叉椂闀匡紝鑻ユ睜涓嚎绋嬫暟閲忓ぇ浜巑inThread锛屼笖鏈夌殑绾跨▼绌洪棽鏃堕暱瓒呰繃freeTimeout锛屽垯娓呴櫎璇ョ嚎绋嬶紝涓轰簡涓嶆竻闄わ紝鎶妋inThread涓巑axThread璁剧疆鐩哥瓑
+    short_busyTimeout锛氱嚎绋嬩笉闂存柇宸ヤ綔鏃堕暱锛堝崟浣嶄负绉�)瓒呮椂闄愶紝璁や负绾跨▼宸茬粡浜嗗穿婧冿紝灏嗗己鍒舵竻闄わ紝鐭伐浣滄椂闀胯缃负5绉�
+    闀垮伐浣滄椂闀跨嚎绋嬫睜锛岀嚎绋嬭礋璐g敤鏃惰緝闀跨殑宸ヤ綔浠诲姟锛屼緥濡傛暟鎹簱瀛樺彇鎿嶄綔
+    long_maxThread锛� 姹犱腑鏈�澶х嚎绋嬫暟涓烘墍鏈塁PU鏍告暟+1锛坰hort姹犱笌long姹犲悇鍒嗕竴鍗婏級锛岃嫢涓�-1锛屼笉鍙楅檺鍒讹紝璁剧疆涓�0锛岃〃绀轰笉鍚姩绾跨▼姹�
+    long_minThread锛� 姹犱腑鏈�灏忕嚎绋嬫暟锛岃嫢涓�-1锛屼笉鍙楅檺鍒讹紝璁剧疆涓�0锛岃〃绀轰笉鍚姩绾跨▼姹�
+    long_freeTimeout锛� 绾跨▼鏁扮┖闂叉椂闀匡紝鑻ユ睜涓嚎绋嬫暟閲忓ぇ浜巑inThread锛屼笖鏈夌殑绾跨▼绌洪棽鏃堕暱瓒呰繃freeTimeout锛屽垯娓呴櫎璇ョ嚎绋�
+    long_busyTimeout锛氱嚎绋嬩笉闂存柇宸ヤ綔鏃堕暱锛堝崟浣嶄负绉�)瓒呮椂闄愶紝鑻ヤ负-1锛屼笉鍙楅檺鍒�
+    enableThreadPool锛氭槸鍚﹀惎鐢ㄧ嚎绋嬫睜
+     -->
+	<!-- 褰撳墠瀹炵幇锛屽啓rtu鏃ュ織銆丷MI鏁版嵁澶勭悊鐢ㄥ埌浜嗙煭绾跨▼姹�  -->
+	<!-- 褰撳墠瀹炵幇锛宺tu涓婅鏁版嵁澶勭悊锛堣鍐欐暟鎹級鐢ㄥ埌浜嗙绾跨▼姹�  -->
+	<support
+			short_maxThread="0"
+			short_minThread="0"
+			short_freeTimeout="60"
+			short_busyTimeout="5"
+			long_maxThread="13"
+			long_minThread="13"
+			long_freeTimeout="60"
+			long_busyTimeout="-1"
+	/>
+	<!--
+	rmi瀹㈡埛绔�
+	 -->
+	<rmiCl
+		rmiSvUrl="127.0.0.1"
+		rmiSvContext="mwTestServer"
+		rmiSvPort="9898"
+	/>
+	<!--
+	enable:鏄惁鍚姩
+	heartbeatTimes:杩炵画閰嶇疆娆℃暟蹇冭烦鍚庡彂閫佷竴娆℃暟鎹�
+	sendInterval:鍙戦�佸績璺虫垨鏁版嵁鐨勬椂闂撮棿闅�
+	 -->
+	<tcpCl
+		enable="true"
+		heartbeatTimes="3"
+		sendInterval="3"
+	/>
+</config>		
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/application.yml b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/application.yml
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/application.yml
@@ -0,0 +1 @@
+
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.yml b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.yml
new file mode 100644
index 0000000..375972f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/resources/log4j2.yml
@@ -0,0 +1,64 @@
+Configuration:
+    #status锛岃繖涓敤浜庤缃甽og4j2鑷韩鍐呴儴鐨勪俊鎭緭鍑猴紝鍙互涓嶈缃紝褰撹缃垚trace鏃讹紝浣犱細鐪嬪埌log4j2鍐呴儴鍚勭璇︾粏杈撳嚭锛涘彲浠ヨ缃垚Off(鍏抽棴)鎴朎rror(鍙緭鍑洪敊璇俊鎭�)
+    status: Error
+
+    Properties: # 瀹氫箟鍏ㄥ眬鍙橀噺
+        Property:
+            #鏃ュ織鏂囦欢瀛樺偍鐨勭洰褰�
+            - name: log.path
+              value: ./logs
+            #鏃ュ織鏂囦欢瀛樺偍鍚嶇О
+            - name: project.name
+              value: mwTestClient
+
+    #瀹氫箟杈撳嚭鍣紝鍙互杈撳嚭鍒版帶鍒跺彴鍜屾枃浠�.
+    Appenders:
+        #杈撳嚭鍒版帶鍒跺彴
+        Console:
+            #Appender鍛藉悕
+            name: CONSOLE
+            target: SYSTEM_OUT
+            ThresholdFilter:
+                level: debug #杈撳嚭鏃ュ織绾у埆锛岃緭鍑烘棩蹇楁椂锛岄鍏堢敱Loggers.Root.level鎴朙oggers.Logger.level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢辨湰level鍒ゆ柇鏄惁杈撳嚭
+                onMatch: ACCEPT #onMatch=ACCEPT 澶т簬绛変簬 "level" 閰嶇疆鐨勭瓑绾у湴鏃ュ織杈撳嚭
+                onMismatch: DENY #onMismatch=DENY 灏忎簬 "level" 閰嶇疆鐨勭瓑绾у湴鏃ュ織涓嶈緭鍑�
+            #鏃ュ織鍐呭鏍峰紡
+            PatternLayout:
+                #%n-鎹㈣
+                #%m-鏃ュ織鍐呭锛岃緭鍑轰唬鐮佷腑鎸囧畾鐨勬棩蹇椾俊鎭�
+                #%p-杈撳嚭浼樺厛绾э紝鍗矰EBUG,INFO,WARN,ERROR,FATAL
+                #%r-绋嬪簭鍚姩鍒扮幇鍦ㄧ殑姣鏁�
+                #%%- 杈撳嚭涓�涓�"%" 瀛楃
+                #%t-褰撳墠绾跨▼鍚�
+                #%d-鏃ユ湡鍜屾椂闂�, 甯哥敤鐨勬牸寮忔湁%d{DATE},%d{ABSOLUTE},%d{HH:mm:ss,SSS},%d{ddMMyyyyHH:mm:ss,SSS}
+                #%l-鍚�%F%L%C%M
+                #%F-java婧愭枃浠跺悕
+                #%L-java婧愮爜琛屾暟
+                #%C-java绫诲悕,%C{1}杈撳嚭鏈�鍚庝竴涓厓绱�
+                #%M-java鏂规硶鍚�
+                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
+        # 杈撳嚭鍒版枃浠讹紝瓒呰繃10MB褰掓。
+        RollingFile:
+            - name: ROLLING_FILE
+              ignoreExceptions: false
+              fileName: ${log.path}/${project.name}.log
+              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
+              ThresholdFilter:
+                  level: error #杈撳嚭鏃ュ織绾у埆锛岃緭鍑烘棩蹇楁椂锛岄鍏堢敱Loggers.Root.level鎴朙oggers.Logger.level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢辨湰level鍒ゆ柇鏄惁杈撳嚭
+                  onMatch: ACCEPT #onMatch=ACCEPT 澶т簬绛変簬 "level" 閰嶇疆鐨勭瓑绾у湴鏃ュ織杈撳嚭
+                  onMismatch: DENY #onMismatch=DENY 灏忎簬 "level" 閰嶇疆鐨勭瓑绾у湴鏃ュ織涓嶈緭鍑�
+              #鏃ュ織鍐呭鏍峰紡
+              PatternLayout:
+                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
+              Policies:
+                  SizeBasedTriggeringPolicy:
+                      size: "10 MB"
+              DefaultRolloverStrategy:
+                  max: 1000
+
+    Loggers:
+        Root:
+            level: info #鏃ュ織杈撳嚭绾у埆锛屽叡鏈�8涓骇鍒紝鎸夌収浠庝綆鍒伴珮涓猴細all < trace < debug < info < warn < error < fatal < off
+            AppenderRef: #Root鐨勫瓙鑺傜偣锛岀敤鏉ユ寚瀹氳鏃ュ織杈撳嚭鍒板摢涓狝ppender.
+                - ref: CONSOLE #杈撳嚭鏃ュ織鏃讹紝棣栧厛鐢辨湰level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢变笂闈㈢殑Appenders.Console.ThresholdFilter.level鍒ゆ柇鏄惁杈撳嚭
+                - ref: ROLLING_FILE  #杈撳嚭鏃ュ織鏃讹紝棣栧厛鐢辨湰level鍒ゆ柇鏄惁杈撳嚭锛岀劧鍚庡啀鐢变笂闈㈢殑Appenders.RollingFile.ThresholdFilter.level鍒ゆ柇鏄惁杈撳嚭

--
Gitblit v1.8.0