zhubaomin
2025-04-07 1a2b07f01ba4616fd9e894dddf474b56d020158c
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolUnit.java
New file
@@ -0,0 +1,93 @@
package com.dy.common.mw.protocol;
import java.util.Collection;
import java.util.HashMap;
import com.dy.common.mw.UnitAdapterInterface;
import com.dy.common.mw.UnitInterface;
import com.dy.common.mw.UnitCallbackInterface;
public class ProtocolUnit implements UnitInterface {
   private static final ProtocolUnit instance = new ProtocolUnit() ;
   public ProtocolUnitAdapter adapter ;
   private ProtocolUnit(){}
   public static ProtocolUnit getInstance(){
      return instance ;
   }
   @Override
   public void setAdapter(UnitAdapterInterface adapter) throws Exception {
      if(adapter == null){
         throw new Exception("协议模块适配器对象不能为空!") ;
      }
      this.adapter = (ProtocolUnitAdapter)adapter ;
      ProtocolConfigVo vo = this.adapter.getConfig() ;
      if(vo == null){
         throw new Exception("协议模块配置对象不能为空!") ;
      }
      if(vo.centerAddr < 0 ||  vo.centerAddr > 4){//云控制中心地址是0
         throw new Exception("协议模块配置对象属性中心地址只能是0、1、2、3、4 !") ;
      }
   }
   /**
    * 启动模块
    */
   public void start(UnitCallbackInterface callback) throws Exception {
      //得到唯一实例, 并在生成唯一实例时,扫描注解类
      AnnotationScan.getIntance() ;
      //各个协议驱动类扫描自己的功能码注解
      HashMap<String, AnnotationDriverVo> drivers =  ProtocolCache.getDriverMap() ;
      Collection<String> keys = drivers.keySet() ;
      StringBuilder totalProtocols = new StringBuilder() ;
      for(String protocolNameVersion : keys){
         if(!totalProtocols.isEmpty()){
            totalProtocols.append(",") ;
         }
         totalProtocols.append(protocolNameVersion) ;
         Driver dri = ProtocolCache.getDriver(protocolNameVersion) ;
         if(dri != null){
            dri.scanAnnotationCode();
            dri.setNotify(adapter.getSingleRtuInfoNotify(protocolNameVersion));
         }
      }
      if(adapter.getConfig().showStartInfo){
         System.out.println("协议模块成功启动,"
                     + "支持的协议:" + totalProtocols  );
      }
      callback.call(null);
   }
   /**
    * 是否只有一个协议
    * @return 结果
    */
   @SuppressWarnings("unused")
   public boolean isOnlyOneProtocol(){
      HashMap<String, AnnotationDriverVo> drivers =  ProtocolCache.getDriverMap() ;
      return drivers.size() == 1 ;
   }
   @Override
   public void stop(UnitCallbackInterface callback) {
   }
   /*
   public static void main(String[] args) throws Exception{
      ProtocolUnit protoUnit = ProtocolUnit.getInstance();
      protoUnit.start(new UnitStartedCallbackInterface(){
         @Override
         public void call(Object obj) {
         }
      });
   }
   */
}