From 4f99f59668c9160ca60958b7347944def26f2228 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期日, 27 四月 2025 10:58:53 +0800
Subject: [PATCH] 回退配置

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java |  167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 167 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java
new file mode 100644
index 0000000..7528501
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java
@@ -0,0 +1,167 @@
+package com.dy.common.mw.channel.tcp;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+import org.apache.mina.core.session.IdleStatus ;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.transport.socket.SocketSessionConfig;
+import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder ;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.executor.ExecutorFilter ;
+
+import com.dy.common.mw.UnitAdapterInterface;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.mw.UnitCallbackInterface;
+
+@SuppressWarnings("unused")
+public class TcpUnit implements UnitInterface {
+	
+	private static final TcpUnit instance = new TcpUnit() ;
+	private static boolean started = false ;
+	
+	private TcpUnitAdapter adapter ;
+	private TcpIoHandler tcpIoHandler ;
+	private DataCodecFactory dataCodecFactory ;
+	
+	private TcpUnit(){} ;
+	
+	public static TcpUnit getInstance(){
+		return instance ;
+	}
+
+	/**
+	 * 鎶奍oSession浼氳瘽鐨処D灞炴�у強鍗忚鍚嶇О鐗堟湰鍙疯缃埌IoSession灞炴�т腑
+	 * @param session
+	 * @param rtuAddr
+	 * @param protocolName
+	 * @param protocolVersion
+	 * @throws Exception
+	 */
+	public void setIoSessionArrs(IoSession session, String rtuAddr, String protocolName, Short protocolVersion) throws Exception {
+		session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr, rtuAddr) ;
+		session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, protocolName) ;
+		session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion, protocolVersion) ;
+	}
+
+	@Override
+	public void setAdapter(UnitAdapterInterface adapter) throws Exception {
+		if(adapter == null){
+			throw new Exception("TCP妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ;
+		}
+		this.adapter = (TcpUnitAdapter)adapter ; 
+		TcpConfigVo vo = this.adapter.getConfig() ;
+		if(vo == null){
+			throw new Exception("TCP妯″潡杩炴帴灞炴�ч厤缃璞′笉鑳戒负绌猴紒") ;
+		}
+		if(vo.port == null || vo.idle == null || vo.processors == null){
+			throw new Exception("TCP妯″潡杩炴帴灞炴�ч厤缃璞″睘鎬у�间笉鑳戒负绌猴紒") ;
+		}
+		if(this.adapter.newPrefixedDataAvailableHandle() == null){
+			throw new Exception("TCP妯″潡涓婅鏁版嵁瑙g爜绫讳负绌猴紒") ;
+		}
+		if(this.adapter.newSessionEventCallback() == null){
+			throw new Exception("TCP妯″潡浜嬩欢澶勭悊鍥炶皟绫讳负绌猴紒") ;
+		}
+	}
+	/**
+	 * 鍚姩妯″潡
+	 */
+	public void start(UnitCallbackInterface callback) throws Exception {
+		if(!started){
+			started = true ;
+			/**
+			 * 寮傛闈為樆濉炵綉缁滈�氫俊鎺ユ敹鍣紝璐熻矗鎺ユ敹鑱旀帴璇锋眰
+			 * 鍚屾椂璁剧疆IoProcessor涓暟
+			 * 杩欎釜鍦版柟鐢ㄤ簬鎵ц鐪熸鐨処O 鎿嶄綔锛岄粯璁ゅ惎鐢ㄧ殑绾跨▼涓暟鏄疌PU 鐨勬牳鏁�+1锛岃濡傦細鍗旵PU 鍙�
+			 * 鏍哥殑鐢佃剳锛岄粯璁ょ殑IoProcessor 绾跨▼浼氬垱寤�3 涓�傝繖涔熷氨鏄涓�涓狪oAcceptor 鎴栬��
+			 * IoConnector 榛樿浼氬叧鑱斾竴涓狪oProcessor 姹狅紝杩欎釜姹犱腑鏈�3 涓狪oProcessor銆傚洜涓篒O 鎿嶄綔
+			 * 鑰楄垂璧勬簮锛屾墍浠ヨ繖閲屼娇鐢↖oProcessor 姹犳潵瀹屾垚鏁版嵁鐨勮鍐欐搷浣滐紝鏈夊姪浜庢彁楂樻�ц兘銆傝繖涔熷氨
+			 * 鏄墠闈㈣鐨処oAccetor銆両oConnector 浣跨敤涓�涓猄elector锛岃�孖oProcessor 浣跨敤鑷繁鍗曠嫭鐨�
+			 * Selector 鐨勫師鍥犮��
+			 * 閭d箞涓轰粈涔圛oProcessor 姹犱腑鐨処oProcessor 鏁伴噺鍙瘮CPU 鐨勬牳鏁板ぇ1 鍛紵鍥犱负IO 璇诲啓鎿�
+			 * 浣滄槸鑰楄垂CPU 鐨勬搷浣滐紝鑰屾瘡涓�鏍窩PU 鍚屾椂鍙兘杩愯涓�涓嚎绋嬶紝鍥犳IoProcessor 姹犱腑鐨�
+			 * IoProcessor 鐨勬暟閲忓苟涓嶆槸瓒婂瓒婂ソ銆�
+			 */
+			NioSocketAcceptor acceptor = new NioSocketAcceptor(this.adapter.getConfig().processors);
+			
+			SocketSessionConfig seConf = acceptor.getSessionConfig() ;
+			
+			/* 璁剧疆璇绘暟鎹椂涓�娆℃�х敵璇峰爢缂撳瓨澶у皬锛�
+			 * 涓�鑸笉闇�瑕佽皟鐢ㄨ繖涓柟娉曪紝鍥犱负IoProcessor 浼氳嚜鍔ㄨ皟鏁寸紦鍐茬殑澶у皬銆�
+			 * 鍙互璋冪敤setMinReadBufferSize()銆乻etMaxReadBufferSize()鏂规硶锛�
+			 * 杩欐牱鏃犺IoProcessor濡備綍鑷姩璋冩暣锛岄兘浼氬湪浣犳寚瀹氱殑鍖洪棿銆�
+			 */
+			//seConf.setReadBufferSize(1024);
+			
+			//璁剧疆缃戠粶鑱旀帴绌洪棽鏃堕暱
+			seConf.setIdleTime(IdleStatus.BOTH_IDLE, this.adapter.getConfig().idle);
+
+			//寰楀埌缃戠粶 閫氫俊鏁版嵁杩囨护鍣ㄩ摼
+			DefaultIoFilterChainBuilder chain = acceptor.getFilterChain() ;
+			//鐢熸垚缂栬В鐮佽繃婊ゅ櫒宸ュ巶绫�
+			dataCodecFactory = new DataCodecFactory(this.adapter) ;
+			//璁剧疆鈥減rotocol鈥濓紝鍔犲叆缂栬В鐮佽繃婊ゅ櫒锛岃繃婊ゅ櫒鍦↖oProcessor绾跨▼涓墽琛�
+			chain.addLast("protocol", new ProtocolCodecFilter(dataCodecFactory));
+			
+			/*
+			 * 涓�鑸珽xecutorFilter 閮借鏀惧湪ProtocolCodecFilter杩囨护鍣ㄧ殑鍚庨潰锛�
+			 * 涔熷氨鏄缂栬В鐮佽繍琛屽湪IoProcessor鎵�鍦ㄧ殑绾跨▼锛屽洜涓虹紪瑙g爜澶勭悊鐨勬暟鎹兘鏄�
+			 * 鐢盜oProcessor璇诲彇鍜屽彂閫佺殑锛屾病蹇呰寮�鍚柊鐨勭嚎绋嬶紝鍚﹀垯鎬ц兘鍙嶈�屼細涓嬮檷銆�
+			 * ExecutorFilter杩囩▼鍣ㄤ細鍚姩涓�涓嚎绋嬫睜锛屽鐞嗗悗缁唬鐮侀�昏緫銆�
+			 * 涓�鑸娇鐢‥xecutorFilter鐨勫吀鍨嬪満鏅槸灏嗕笟鍔¢�昏緫锛堣濡傦細鑰楁椂鐨勬暟鎹簱鎿嶄綔锛�
+			 * 鏀惧湪鍗曠嫭鐨勭嚎绋嬩腑杩愯锛屼篃灏辨槸璇翠笌IO澶勭悊鏃犲叧鐨勬搷浣滃彲浠ヨ�冭檻浣跨敤ExecutorFilter鏉ュ紓姝ユ墽琛屻��
+			 * 鏈鐢ㄦ硶锛屼娇ExecutorFilter绾跨▼姹犱腑鐨勭嚎绋嬪鐞咺OHandler锛圱cpIoHandler锛夋搷浣�
+			 */
+			chain.addLast("exceutor", new ExecutorFilter());
+
+			//涓氬姟閫昏緫澶勭悊鍣紝璐熻矗澶勭悊缃戠粶浼氳瘽鍙婅緭鍏ヨ緭鍑烘暟鎹�
+			tcpIoHandler = new TcpIoHandler(this.adapter) ;
+			acceptor.setHandler(tcpIoHandler) ;
+
+			boolean isException = false ;
+			try {
+				acceptor.bind(new InetSocketAddress(this.adapter.getConfig().port));
+			} catch (IOException e) {
+				e.printStackTrace();
+				System.out.println("TCP閫氫俊妯″潡鍚姩澶辫触锛�" + (e.getMessage()==null?"":e.getMessage()));
+				isException = true ;
+			}finally{
+				;
+			}
+
+			if(!isException){
+				if(this.adapter.getConfig().showStartInfo != null && this.adapter.getConfig().showStartInfo.booleanValue()){
+					System.out.println("TCP妯″潡鎴愬姛鍚姩锛岀鍙o細" + this.adapter.getConfig().port);
+				}
+			}
+			
+			callback.call(null);
+		}
+	}
+
+	/**
+	 * 鍋滄妯″潡杩愯锛屽皢涓嶅啀鎺ュ叆TCP缃戠粶杩炴帴锛屽苟鎶婂凡缁弔cp杩炴帴鐨勫叏閮ㄦ柇杩炴帴
+	 * @param callback
+	 * @throws Exception
+	 */
+	@Override
+	public void stop(UnitCallbackInterface callback) throws Exception {
+		this.tcpIoHandler.stop();
+		this.dataCodecFactory.stop();
+		this.adapter.newUnitStopCallback().callback();
+		callback.call(null);
+	}
+
+	/**
+	 * 瑙i櫎鍋滄锛屾仮澶峊CP鏈嶅姟杩愯
+	 * @throws Exception
+	 */
+	public void recover() throws Exception {
+		this.tcpIoHandler.recover();
+		this.dataCodecFactory.recover();
+	}
+	
+
+}

--
Gitblit v1.8.0