liurunyu
2025-03-21 fb50c6c8111fffd16091ce25d5d389ea3fcc560f
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java
@@ -13,7 +13,7 @@
import com.dy.common.mw.UnitAdapterInterface;
import com.dy.common.mw.UnitInterface;
import com.dy.common.mw.UnitStartedCallbackInterface;
import com.dy.common.mw.UnitCallbackInterface;
@SuppressWarnings("unused")
public class TcpUnit implements UnitInterface {
@@ -30,16 +30,21 @@
   public static TcpUnit getInstance(){
      return instance ;
   }
   /**
    * 把IoSession会话的ID属性设置到IoSession属性中
    * 把IoSession会话的ID属性及协议名称版本号设置到IoSession属性中
    * @param session
    * @param rtuAddr
    * @param protocolName
    * @param protocolVersion
    * @throws Exception
    */
   public void setIoSessionArrId(IoSession session, String id) throws Exception {
      session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey, id) ;
   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){
@@ -63,7 +68,7 @@
   /**
    * 启动模块
    */
   public void start(UnitStartedCallbackInterface callback) throws Exception {
   public void start(UnitCallbackInterface callback) throws Exception {
      if(!started){
         started = true ;
         /**
@@ -95,16 +100,19 @@
         //得到网络 通信数据过滤器链
         DefaultIoFilterChainBuilder chain = acceptor.getFilterChain() ;
         //编解码过滤器
         //生成编解码过滤器工厂类
         dataCodecFactory = new DataCodecFactory(this.adapter) ;
         //设置“protocol”,加入编解码过滤器,过滤器在IoProcessor线程中执行
         chain.addLast("protocol", new ProtocolCodecFilter(dataCodecFactory));
         
         /*
          * 一般ExecutorFilter 都要放在ProtocolCodecFilter 过滤器的后面,
          * 也就是不要让编解码运行在独立的线程上,而是要运行在IoProcessor 所在的线程,
          * 因为编解码处理的数据都是由IoProcessor 读取和发送的,没必要开启新的线程,
          * 否则性能反而会下降。一般使用ExecutorFilter 的典型场景是将业务逻辑(譬如:耗时的数据库操作)
          * 放在单独的线程中运行,也就是说与IO 处理无关的操作可以考虑使用ExecutorFilter 来异步执行。
          * 一般ExecutorFilter 都要放在ProtocolCodecFilter过滤器的后面,
          * 也就是让编解码运行在IoProcessor所在的线程,因为编解码处理的数据都是
          * 由IoProcessor读取和发送的,没必要开启新的线程,否则性能反而会下降。
          * ExecutorFilter过程器会启动一个线程池,处理后续代码逻辑。
          * 一般使用ExecutorFilter的典型场景是将业务逻辑(譬如:耗时的数据库操作)
          * 放在单独的线程中运行,也就是说与IO处理无关的操作可以考虑使用ExecutorFilter来异步执行。
          * 本处用法,使ExecutorFilter线程池中的线程处理IOHandler(TcpIoHandler)操作
          */
         chain.addLast("exceutor", new ExecutorFilter());
@@ -139,7 +147,7 @@
    * @throws Exception
    */
   @Override
   public void stop(UnitStartedCallbackInterface callback) throws Exception {
   public void stop(UnitCallbackInterface callback) throws Exception {
      this.tcpIoHandler.stop();
      this.dataCodecFactory.stop();
      this.adapter.newUnitStopCallback().callback();