zhubaomin
2025-04-17 1e3eeec2d3a470d066d21900586b912dfef58c91
pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java
New file
@@ -0,0 +1,211 @@
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 ;
         }
      }
   }
}