package com.dy.testServer; 
 | 
  
 | 
import java.io.Console; 
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
  
 | 
import com.dy.testServer.console.CommandConsole; 
 | 
import com.dy.testServer.forRmi.Manager; 
 | 
import org.jdom2.Document; 
 | 
  
 | 
import com.dy.common.mw.UnitInterface; 
 | 
import com.dy.common.mw.UnitStartedCallbackInterface; 
 | 
import com.dy.common.mw.channel.rmi.RmiConfigVo; 
 | 
import com.dy.common.mw.channel.rmi.RmiUnit; 
 | 
import com.dy.common.util.ConfigXml; 
 | 
import com.dy.common.util.NumUtil; 
 | 
  
 | 
public class Server{ 
 | 
  
 | 
    private ConfigXml conf = null ; 
 | 
    private Document doc = null ; 
 | 
    private boolean showStartInfo = false ; 
 | 
     
 | 
    private String RmiSvUrl ; 
 | 
     
 | 
    private final List<UnitInterface> units = new ArrayList<>() ; 
 | 
  
 | 
    /** 
 | 
     * @param args 参数 
 | 
     */ 
 | 
    public static void main(String[] args) { 
 | 
        new Server().startServer(args); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 启动服务 
 | 
     */ 
 | 
    public void startServer(String[] args){ 
 | 
        Server sv = new Server(); 
 | 
        long start = System.currentTimeMillis() ; 
 | 
        try { 
 | 
            sv.conf = new ConfigXml() ; 
 | 
            sv.doc = sv.conf.createDom(sv.getClass(), "config.xml") ; 
 | 
            //////////////// 
 | 
            //服务 配置 
 | 
            sv.showStartInfo = sv.conf.getSetAttrBoolean(sv.doc, "config.server", "showStartInfo", null, null) ; 
 | 
  
 | 
            sv.startUnits() ; 
 | 
             
 | 
            String svName ; 
 | 
            try{ 
 | 
                svName = sv.conf.getSetAttrTxt(sv.doc, "config.server", "name", null, false, null) ; 
 | 
            }catch(Exception e){ 
 | 
                svName = "" ; 
 | 
            } 
 | 
             
 | 
            System.out.println("OOOOOOOOOO           OOOOOOOO       OOOOOOOO") ; 
 | 
            System.out.println("@@@@@@@@@@@@@@@@#O    $@@@@@@@@&    @@@@@@@@#") ;        
 | 
            System.out.println("@@@@@@@@@@@@@@@@@@@#    @@@@@@@@# $@@@@@@@@&") ;         
 | 
            System.out.println("@@@@@@@@@@@@@@@@@@@@@#   #@@@@@@@@@@@@@@@@O") ;     
 | 
            System.out.println("@@@@@@@@@@@@@@@@@@@@@@@   &@@@@@@@@@@@@@@") ;            
 | 
            System.out.println("@@@@@@$      $@@@@@@@@@&   O@@@@@@@@@@@#") ;         
 | 
            System.out.println("@@@@@@$        @@@@@@@@@     @@@@@@@@@&  " + svName + "mwTestSv " ) ; 
 | 
            System.out.println("@@@@@@$        @@@@@@@@@     &@@@@@@@@") ; 
 | 
            System.out.println("@@@@@@$       O@@@@@@@@@     &@@@@@@@@") ;               
 | 
            if(sv.RmiSvUrl != null){ 
 | 
                System.out.println("@@@@@@$      #@@@@@@@@@$     &@@@@@@@@   RmiSv " + sv.RmiSvUrl ) ;         
 | 
            }else{ 
 | 
                System.out.println("@@@@@@$      #@@@@@@@@@$     &@@@@@@@@" ) ;         
 | 
            } 
 | 
            System.out.println("@@@@@@@@@@@@@@@@@@@@@@#      &@@@@@@@@   Runing in standalone mode" ) ;     
 | 
            System.out.println("@@@@@@@@@@@@@@@@@@@@@&       &@@@@@@@@   Startup in " + (System.currentTimeMillis() - start) + " MS" ) ;               
 | 
            System.out.println("@@@@@@@@@@@@@@@@@@@#         &@@@@@@@@") ;             
 | 
            System.out.println("@@@@@@@@@@@@@@@@#O           &@@@@@@@@") ;               
 | 
  
 | 
  
 | 
             
 | 
            Console console = System.console(); 
 | 
            if (console == null) { 
 | 
                throw new IllegalStateException("严重错误,未能得到控制台对象!"); 
 | 
            } 
 | 
            CommandConsole mwConsole = new CommandConsole(console) ; 
 | 
            mwConsole.init(args); 
 | 
            boolean exit = mwConsole.clientConsole() ; 
 | 
            if(exit){ 
 | 
                System.exit(-1); 
 | 
            } 
 | 
        }catch(Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
    } 
 | 
     
 | 
    private void startUnits(){ 
 | 
        try { 
 | 
            /////////////// 
 | 
            //基本配置 
 | 
            String txt = conf.getSetAttrTxt(doc, "config.base", "rtuAddrStart", null, false, null) ; 
 | 
            if(txt == null || txt.trim().equals("")){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrStart的值为空字符串!"); 
 | 
            } 
 | 
            txt = txt.trim() ; 
 | 
            if(!NumUtil.isPlusIntNumber(txt)){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrStart的值必须为数值!"); 
 | 
            } 
 | 
            if(txt.startsWith("0")){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrStart的数值不能以0开头!"); 
 | 
            } 
 | 
            if(txt.length() != 10){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrStart的数值长度必须为10位!"); 
 | 
            } 
 | 
            ServerProperties.rtuAddrStart = Long.valueOf(txt) ; 
 | 
             
 | 
            txt = conf.getSetAttrTxt(doc, "config.base", "rtuAddrEnd", null, false, null) ; 
 | 
            if(txt == null || txt.trim().equals("")){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrEnd的值为空字符串!"); 
 | 
            } 
 | 
            txt = txt.trim() ; 
 | 
            if(!NumUtil.isPlusIntNumber(txt)){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrEnd的值必须为数值!"); 
 | 
            } 
 | 
            if(txt.startsWith("0")){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrEnd的数值不能以0开头!"); 
 | 
            } 
 | 
            if(txt.length() != 10){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrEnd的数值长度必须为10位!"); 
 | 
            } 
 | 
            ServerProperties.rtuAddrEnd = Long.valueOf(txt) ; 
 | 
            if(ServerProperties.rtuAddrEnd <= ServerProperties.rtuAddrStart){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrEnd的数值必须大于rtuAddrStart!"); 
 | 
            } 
 | 
     
 | 
            ServerProperties.rtuAddrPerMwTest = conf.getSetAttrPlusInt(doc, "config.base", "rtuAddrPerMwTest", null, 1, null, null) ; 
 | 
            if(ServerProperties.rtuAddrPerMwTest > ServerProperties.rtuAddrEnd - ServerProperties.rtuAddrStart){ 
 | 
                throw new Exception("元素config.base的属性rtuAddrPerMwTest的数值配置不正确!"); 
 | 
            } 
 | 
            ServerProperties.tcpServerIp = conf.getSetAttrTxt(doc, "config.base", "tcpServerIp", null, false, null) ; 
 | 
            ServerProperties.tcpServerPort = conf.getSetAttrPlusInt(doc, "config.base", "tcpServerPort", null, 1, 65535, null) ; 
 | 
            ServerProperties.sendInterval = conf.getSetAttrPlusInt(doc, "config.base", "sendInterval", null, 1, null, null) ; 
 | 
            ServerProperties.heartbeatTimes = conf.getSetAttrPlusInt(doc, "config.base", "heartbeatTimes", null, 1, null, null) ; 
 | 
            ServerProperties.sendTimes = conf.getSetAttrPlusInt(doc, "config.base", "sendTimes", null, 1, null, null) ; 
 | 
            ServerProperties.sendOverThenCloseConnect = conf.getSetAttrPlusInt(doc, "config.base", "sendOverThenCloseConnect", null, 0, 1, null) ; 
 | 
  
 | 
                 
 | 
            ///////////////// 
 | 
            //RMI模块 
 | 
            Manager.init(); 
 | 
            RmiConfigVo rmiVo = new RmiConfigVo(); 
 | 
            rmiVo.enable = conf.getSetAttrBoolean(doc, "config.rmi", "enable", null, null) ; 
 | 
            if(rmiVo.enable){ 
 | 
                rmiVo.port = conf.getSetAttrPlusInt(doc, "config.rmi", "port", null, 100, 65535, null); 
 | 
                rmiVo.context = conf.getSetAttrTxt(doc, "config.rmi", "context", null, false, null); 
 | 
                rmiVo.showStartInfo = showStartInfo ; 
 | 
                AdapterImp_RmiUnit rmiAdap = new AdapterImp_RmiUnit(); 
 | 
                rmiAdap.setConfig(rmiVo); 
 | 
                RmiUnit rmiUnit = RmiUnit.getInstance(); 
 | 
                rmiUnit.setAdapter(rmiAdap); 
 | 
                rmiUnit.start(new UnitStartedCallbackInterface(){ 
 | 
                    @Override 
 | 
                    public void call(Object obj) { 
 | 
                    } 
 | 
                }); 
 | 
                RmiSvUrl = "[ip]:" + rmiVo.port + "/" + rmiVo.context ; 
 | 
                units.add(rmiUnit) ; 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        }         
 | 
    } 
 | 
     
 | 
} 
 |