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 enablemwTestStart = 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)){ 
 | 
            doDealReportCount(rqVo) ; 
 | 
        }else if(rqVo.code.equals(Code.cd5)){ 
 | 
            doDealReportOver(rqVo) ; 
 | 
        }else if(rqVo.code.equals(Code.cd6)){ 
 | 
            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 ; 
 | 
            sta = new MwTestClientStatus() ; 
 | 
            sta.confVo = conVo ; 
 | 
            token2ClientMap.put("" + token, sta); 
 | 
        }else{ 
 | 
            conVo = sta.confVo; 
 | 
        } 
 | 
        return conVo ; 
 | 
    } 
 | 
    private static ResStartVo doDealGetStart(RmiRequestVo rqVo){ 
 | 
        ResStartVo rvo = new ResStartVo() ; 
 | 
        rvo.start = enablemwTestStart ; 
 | 
        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 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 ; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
} 
 |