| New file | 
 |  |  | 
 |  |  | 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) { | 
 |  |  |          } | 
 |  |  |       }); | 
 |  |  |    } | 
 |  |  |    */ | 
 |  |  |  | 
 |  |  | } |