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.UnitStartedCallbackInterface; 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(UnitStartedCallbackInterface callback) throws Exception { //得到唯一实例, 并在生成唯一实例时,扫描注解类 AnnotationScan.getIntance() ; //各个协议驱动类扫描自己的功能码注解 HashMap drivers = ProtocolCache.getDriverMap() ; Collection colDrivers = drivers.keySet() ; StringBuilder totalProtocols = new StringBuilder() ; for(String protocolName : colDrivers){ if(!totalProtocols.isEmpty()){ totalProtocols.append(",") ; } totalProtocols.append(protocolName) ; Driver dri = ProtocolCache.getDriver(protocolName) ; if(dri != null){ dri.scanAnnotationCode(); } } if(adapter.getConfig().showStartInfo){ System.out.println("协议模块成功启动," + "支持的协议:" + totalProtocols ); } callback.call(null); } /** * 是否只有一个协议 * @return 结果 */ @SuppressWarnings("unused") public boolean isOnlyOneProtocol(){ HashMap drivers = ProtocolCache.getDriverMap() ; return drivers.size() == 1 ; } @Override public void stop(UnitStartedCallbackInterface callback) { } /* public static void main(String[] args) throws Exception{ ProtocolUnit protoUnit = ProtocolUnit.getInstance(); protoUnit.start(new UnitStartedCallbackInterface(){ @Override public void call(Object obj) { } }); } */ }