package com.dy.rtuMw.server.forTcp; 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 map = new HashMap() ; /** * 得到全部状态 * @return */ public static Map allStatus(){ return map ; } /** * 得到部分状态 * @return */ public static Map partStatus(String[] rtuAddrArrGrp){ synchronized (map){ Map map = new HashMap<>(); for(String rtuAddr : rtuAddrArrGrp){ RtuStatus status = map.get(rtuAddr) ; if(status != null){ map.put(rtuAddr, status) ; } } return map ; } } 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(); } } }