| 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 ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|