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