| New file | 
 |  |  | 
 |  |  | package com.dy.testServer.forRmi; | 
 |  |  |  | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | import com.dy.testServer.ServerProperties; | 
 |  |  |  | 
 |  |  | public class Manager { | 
 |  |  |  | 
 |  |  |    public static boolean enablemwTestStartTcpConnect = false ; | 
 |  |  |  | 
 |  |  |    public static boolean enablemwTestStartRtuReport = false ; | 
 |  |  |  | 
 |  |  |    public static int clientId = 1 ; | 
 |  |  | 	 | 
 |  |  |    public static long maxClient = 0 ; | 
 |  |  | 	 | 
 |  |  |    public static Map<String, String> id2TokenMap = new HashMap<>() ; | 
 |  |  |  | 
 |  |  |    public static Map<String, MwTestClientStatus> token2ClientMap = new HashMap<>() ; | 
 |  |  | 	 | 
 |  |  |    public static List<Object[]> rtuAddrList = new ArrayList<>() ; | 
 |  |  | 	 | 
 |  |  |    public static void init(){ | 
 |  |  |       maxClient = (ServerProperties.rtuAddrEnd - ServerProperties.rtuAddrStart)/ServerProperties.rtuAddrPerMwTest ; | 
 |  |  |       if((ServerProperties.rtuAddrEnd - ServerProperties.rtuAddrStart)%ServerProperties.rtuAddrPerMwTest > 0 ){ | 
 |  |  |          maxClient = maxClient + 1 ; | 
 |  |  |       } | 
 |  |  |       int count = 0 ; | 
 |  |  |       for(int i = 0; i < maxClient; i++){ | 
 |  |  |          long start = ServerProperties.rtuAddrStart + (i * ServerProperties.rtuAddrPerMwTest) ; | 
 |  |  |          long end = ServerProperties.rtuAddrStart + ((i + 1) * ServerProperties.rtuAddrPerMwTest - 1) ; | 
 |  |  |          if(end > ServerProperties.rtuAddrEnd){ | 
 |  |  |             end = ServerProperties.rtuAddrEnd ; | 
 |  |  |          } | 
 |  |  |          if(end < start){ | 
 |  |  |             break ; | 
 |  |  |          }else{ | 
 |  |  |             rtuAddrList.add(count++, new Object[]{start, end}); | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |    public synchronized static String dealRequest(Object obj) throws Exception{ | 
 |  |  |       RmiResponseVo resVo ; | 
 |  |  |       if(obj == null){ | 
 |  |  |          resVo = new RmiResponseVo() ; | 
 |  |  |          resVo.success = false ; | 
 |  |  |          resVo.errorInfo = "收到的数据为null" ; | 
 |  |  |       }else if(!(obj instanceof String)){ | 
 |  |  |          resVo = new RmiResponseVo() ; | 
 |  |  |          resVo.success = false ; | 
 |  |  |          resVo.errorInfo = "收到的数据不是字符串类型" ; | 
 |  |  |       }else{ | 
 |  |  |          RmiRequestVo rqVo = RmiRequestVo.jsonToObject((String)obj) ; | 
 |  |  |          resVo = doDeal(rqVo) ; | 
 |  |  |       } | 
 |  |  |       return resVo.toJson() ; | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |    private static RmiResponseVo doDeal(RmiRequestVo rqVo){ | 
 |  |  |       RmiResponseVo resVo = new RmiResponseVo() ; | 
 |  |  |       resVo.code = rqVo.code ; | 
 |  |  |       if(rqVo.code.equals(Code.cd1)){ | 
 |  |  |          if(rqVo.id == null || rqVo.id.trim().equals("")){ | 
 |  |  |             resVo.success = false ; | 
 |  |  |             resVo.errorInfo = "注册失败,必须提供客户端ID " ; | 
 |  |  |          }else{ | 
 |  |  |             ResRegisterVo vo = doDealRegister(rqVo) ; | 
 |  |  |             if(vo != null){ | 
 |  |  |                resVo.obj = vo ; | 
 |  |  |             }else{ | 
 |  |  |                resVo.success = false ; | 
 |  |  |                resVo.errorInfo = "rtuAddr已经分配完成,注册失败" ; | 
 |  |  |             } | 
 |  |  |          } | 
 |  |  |       }else if(rqVo.code.equals(Code.cd2)){ | 
 |  |  |          resVo.obj = doDealGetConfig(rqVo) ; | 
 |  |  |       }else if(rqVo.code.equals(Code.cd3)){ | 
 |  |  |          resVo.obj = doDealGetStart(rqVo) ; | 
 |  |  |       }else if(rqVo.code.equals(Code.cd4)){ | 
 |  |  |          resVo.obj = doDealGetReport(rqVo) ; | 
 |  |  |       }else if(rqVo.code.equals(Code.cd5)){ | 
 |  |  |          doDealReportCount(rqVo) ; | 
 |  |  |       }else if(rqVo.code.equals(Code.cd6)){ | 
 |  |  |          doDealReportOver(rqVo) ; | 
 |  |  |       }else if(rqVo.code.equals(Code.cd7)){ | 
 |  |  |          doDealAllOver(rqVo) ; | 
 |  |  |       } | 
 |  |  |       return resVo ; | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |    private static ResRegisterVo doDealRegister(RmiRequestVo rqVo){ | 
 |  |  |       ResRegisterVo resVo = null ; | 
 |  |  |       String token = id2TokenMap.get(rqVo.id) ; | 
 |  |  |       if(token == null){ | 
 |  |  |          if(clientId <= rtuAddrList.size()){ | 
 |  |  |             resVo =  new ResRegisterVo() ; | 
 |  |  |             resVo.token = "" + clientId ; | 
 |  |  |             id2TokenMap.put(rqVo.id, resVo.token) ; | 
 |  |  |             clientId++ ; | 
 |  |  |          } | 
 |  |  |       }else{ | 
 |  |  |          resVo =  new ResRegisterVo() ; | 
 |  |  |          resVo.token = token ; | 
 |  |  |       } | 
 |  |  |       return resVo ; | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |    private static MwConfigVo doDealGetConfig(RmiRequestVo rqVo){ | 
 |  |  |       MwConfigVo conVo ; | 
 |  |  |       int token = Integer.parseInt(rqVo.token) ; | 
 |  |  |       MwTestClientStatus sta = token2ClientMap.get("" + token); | 
 |  |  |       if(sta == null){ | 
 |  |  |          Object[] rtuAddrs = rtuAddrList.get(token-1) ; | 
 |  |  |          conVo = new MwConfigVo() ; | 
 |  |  |          conVo.rtuAddrStart = (Long)rtuAddrs[0] ; | 
 |  |  |          conVo.rtuAddrEnd = (Long)rtuAddrs[1] ; | 
 |  |  |          conVo.tcpServerIp = ServerProperties.tcpServerIp ; | 
 |  |  |          conVo.tcpServerPort = ServerProperties.tcpServerPort ; | 
 |  |  |          conVo.sendInterval = ServerProperties.sendInterval ; | 
 |  |  |          conVo.heartbeatTimes = ServerProperties.heartbeatTimes ; | 
 |  |  |          conVo.sendTimes = ServerProperties.sendTimes ; | 
 |  |  |          conVo.sendOverThenCloseConnect = ServerProperties.sendOverThenCloseConnect ; | 
 |  |  |          sta = new MwTestClientStatus() ; | 
 |  |  |          sta.confVo = conVo ; | 
 |  |  |          token2ClientMap.put("" + token, sta); | 
 |  |  |       }else{ | 
 |  |  |          conVo = sta.confVo; | 
 |  |  |       } | 
 |  |  |       return conVo ; | 
 |  |  |    } | 
 |  |  |    private static ResStartTcpConnectVo doDealGetStart(RmiRequestVo rqVo){ | 
 |  |  |       ResStartTcpConnectVo rvo = new ResStartTcpConnectVo() ; | 
 |  |  |       rvo.start = enablemwTestStartTcpConnect ; | 
 |  |  |       int token = Integer.parseInt(rqVo.token) ; | 
 |  |  |       MwTestClientStatus sta = token2ClientMap.get("" + token); | 
 |  |  |       if(sta == null){ | 
 |  |  |          sta = new MwTestClientStatus() ; | 
 |  |  |          sta.startVo = rvo ; | 
 |  |  |          token2ClientMap.put("" + token, sta); | 
 |  |  |       }else{ | 
 |  |  |          sta.startVo = rvo ; | 
 |  |  |       } | 
 |  |  |       return rvo ; | 
 |  |  |    } | 
 |  |  |    private static ResStartRtuReportVo doDealGetReport(RmiRequestVo rqVo){ | 
 |  |  |       ResStartRtuReportVo rvo = new ResStartRtuReportVo() ; | 
 |  |  |       rvo.report = enablemwTestStartRtuReport ; | 
 |  |  |       int token = Integer.parseInt(rqVo.token) ; | 
 |  |  |       MwTestClientStatus sta = token2ClientMap.get("" + token); | 
 |  |  |       if(sta == null){ | 
 |  |  |          sta = new MwTestClientStatus() ; | 
 |  |  |          sta.reportVo = rvo ; | 
 |  |  |          token2ClientMap.put("" + token, sta); | 
 |  |  |       }else{ | 
 |  |  |          sta.reportVo = rvo ; | 
 |  |  |       } | 
 |  |  |       return rvo ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  | 	 | 
 |  |  |    private static void doDealReportCount(RmiRequestVo rqVo){ | 
 |  |  |       int token = Integer.parseInt(rqVo.token) ; | 
 |  |  |       MwTestClientStatus sta = token2ClientMap.get("" + token); | 
 |  |  |       if(sta == null){ | 
 |  |  |          sta = new MwTestClientStatus() ; | 
 |  |  |          sta.count = rqVo.count ; | 
 |  |  |          token2ClientMap.put("" + token, sta); | 
 |  |  |       }else{ | 
 |  |  |          sta.count = rqVo.count ; | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  |    private static void doDealReportOver(RmiRequestVo rqVo){ | 
 |  |  |       int token = Integer.parseInt(rqVo.token) ; | 
 |  |  |       MwTestClientStatus sta = token2ClientMap.get("" + token); | 
 |  |  |       if(sta == null){ | 
 |  |  |          sta = new MwTestClientStatus() ; | 
 |  |  |          sta.overCount = rqVo.overCount ; | 
 |  |  |          token2ClientMap.put("" + token, sta); | 
 |  |  |       }else{ | 
 |  |  |          sta.overCount = rqVo.overCount ; | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |    private static void doDealAllOver(RmiRequestVo rqVo){ | 
 |  |  |       int token = Integer.parseInt(rqVo.token) ; | 
 |  |  |       MwTestClientStatus sta = token2ClientMap.get("" + token); | 
 |  |  |       if(sta == null){ | 
 |  |  |          sta = new MwTestClientStatus() ; | 
 |  |  |          if(rqVo.over != null && rqVo.over){ | 
 |  |  |             sta.over = true ; | 
 |  |  |             sta.seconds = rqVo.seconds ; | 
 |  |  |          } | 
 |  |  |          token2ClientMap.put("" + token, sta); | 
 |  |  |       }else{ | 
 |  |  |          if(rqVo.over != null && rqVo.over){ | 
 |  |  |             sta.over = true ; | 
 |  |  |             sta.seconds = rqVo.seconds ; | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } |