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