package com.dy.rtuMw.server.forTcp;
|
|
import com.dy.common.mw.protocol.rtuState.RtuStatus;
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
public class RtuStatusDealer {
|
private static Logger log = LogManager.getLogger(RtuStatusDealer.class.getName()) ;
|
|
private static Map<String, RtuStatus> map = new HashMap<String, RtuStatus>() ;
|
|
/**
|
* 得到全部状态
|
* @return
|
*/
|
public static Map<String, RtuStatus> allStatus(){
|
return map ;
|
}
|
/**
|
* 得到部分状态
|
* @return
|
*/
|
public static Map<String, RtuStatus> someStatus(String[] rtuAddrArrGrp){
|
synchronized (map){
|
Map<String, RtuStatus> rsMap = new HashMap<>();
|
for(String rtuAddr : rtuAddrArrGrp){
|
RtuStatus status = map.get(rtuAddr) ;
|
if(status != null){
|
rsMap.put(rtuAddr, status) ;
|
}
|
}
|
return rsMap ;
|
}
|
}
|
/**
|
* 得到一个RTU的状态
|
* @return
|
*/
|
public static RtuStatus oneStatus(String rtuAddr){
|
return map.get(rtuAddr) ;
|
}
|
|
|
public static void onLine(String rtuAddr, String ip, Integer port, String protocolName, Short protocolVersion){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.onLine(rtuAddr, ip, port, protocolName, protocolVersion) ;
|
map.put(rtuAddr, vo);
|
}else {
|
vo.onLine(rtuAddr, ip, port, protocolName, protocolVersion) ;
|
}
|
}
|
|
public static void offLine(String rtuAddr){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.offLine();
|
map.put(rtuAddr, vo);
|
}else {
|
vo.offLine();
|
}
|
}
|
|
public static void upData(String rtuAddr, String code, String codeName, Integer bufferLen){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.upData(code, codeName, bufferLen);
|
map.put(rtuAddr, vo);
|
}else {
|
vo.upData(code, codeName, bufferLen);
|
}
|
}
|
|
public static void upAutoReport(String rtuAddr, String code, String codeName, Integer bufferLen){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.upData(code, codeName, bufferLen);
|
map.put(rtuAddr, vo);
|
}else {
|
vo.upData(code, codeName, bufferLen);
|
}
|
}
|
|
public static void downData(String rtuAddr, String code, String codeName, Integer bufferLen){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.downData(code, codeName, bufferLen);
|
map.put(rtuAddr, vo);
|
}else {
|
vo.downData(code, codeName, bufferLen);
|
}
|
}
|
|
public static void commandSuccess(String rtuAddr, String code, String codeName){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.commandSuccess(code, codeName);
|
map.put(rtuAddr, vo);
|
}else {
|
vo.commandSuccess(code, codeName);
|
}
|
}
|
|
public static void commandFailure(String rtuAddr, String code, String codeName){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.commandFailure(code, codeName);
|
map.put(rtuAddr, vo);
|
}else {
|
vo.commandFailure(code, codeName);
|
}
|
}
|
|
/**
|
* 命令结果收到了,但未在缓存匹配上下行的命令,说明下行缓存命令因超时被清除,这说明有个命令由失败变成功了
|
* @param rtuAddr
|
*/
|
public static void commandFail2Success(String rtuAddr){
|
//暂时无逻辑
|
}
|
|
/**
|
* 收到了成功开阀报(开阀自报,开阀工作报,远程开阀(执行)应答等,都认为阀门是开启状态(这时上报的数据中阀门状态可能是关闭(因为打开阀门需要时间)))
|
* @param rtuAddr
|
*/
|
public static void valveOpen(String rtuAddr){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.valveOpen();
|
map.put(rtuAddr, vo);
|
}else {
|
vo.valveOpen();
|
}
|
}
|
|
/**
|
* 收到了成功关阀报(关阀自报,远程关阀(执行)应答等,都认为阀门是关闭状态(这时上报的数据中阀门状态可能是开启(因为关闭阀门需要时间)))
|
* @param rtuAddr
|
*/
|
public static void valveClose(String rtuAddr){
|
RtuStatus vo = map.get(rtuAddr) ;
|
if(vo == null) {
|
vo = new RtuStatus();
|
vo.valveClose();
|
map.put(rtuAddr, vo);
|
}else {
|
vo.valveClose();
|
}
|
}
|
|
}
|