/**
   * ***************************************
   * <li>描 述:程序主方法<br>
   * <li>时 间:2013-9-9 上午9:07:53<br>
   * <li>参数: @param args<br>
   *     ***************************************
   */
  public static void main(String[] args) {
    ServerSocket listener = null;
    try {
      System.out.println("指令服务应用程序正在启动中 ... ...");
      logger.info("指令服务应用程序正在启动中 ... ...");
      SystemUtil.progress("15");

      // 初始化配置文件
      ConfigLoader.getInstance();
      ConfigLoader.init(args);

      Thread.sleep(2000);
      SystemUtil.progress("30");
      ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml");
      logger.info("-CommandServiceMain--(1)-初始化完成");

      // 创建远程诊断文件夹
      createRemoteDiagnosisDir();

      SystemUtil.progress("45");
      Thread.sleep(2000);
      // 指令解析线程
      Thread commandParseThread = (Thread) context.getBean("commandParseThread");
      commandParseThread.start();

      SystemUtil.progress("60");
      Thread.sleep(2000);
      // 指令分配线程
      Thread allocationInstructionThread = (Thread) context.getBean("allocationInstructionThread");
      allocationInstructionThread.start();
      logger.info("-CommandServiceMain--(2)-指令解析、分配线程初始化完成");

      SystemUtil.progress("75");
      Thread.sleep(2000);
      IoClient fileSaveServiceClient = (IoClient) context.getBean("ioClient");
      fileSaveServiceClient.connect();
      logger.info("-CommandServiceMain--(3)-通讯部分启动完成");

      SystemUtil.progress("85");
      Thread.sleep(2000);
      // 打开管理端口
      SystemConfig systemConfig = (SystemConfig) context.getBean("systemConfig");
      Integer managementPort = systemConfig.getManagementPort();
      if (managementPort == null || managementPort == 0) {
        throw new Exception("打开管理端口异常(原因:1.配置获取错误):" + managementPort);
      }
      listener = new ServerSocket(managementPort, 1, InetAddress.getLocalHost());
      logger.info("-CommandServiceMain--(4)-打开管理端口[" + managementPort + "]完成!");

      System.out.println("---(ok)---应用程序启动完成 !");
      logger.info("-CommandServiceMain--(ok)-应用程序启动完成 !");

      SystemUtil.progress("100");
    } catch (Exception e) {
      System.out.println(
          "-CommandServiceMain--(error)---应用程序启动异常!" + e.getMessage() + " \r\n 程序退出!!!");
      logger.error("-CommandServiceMain--(error)-应用程序启动异常 !" + e.getMessage() + " \r\n 程序退出!!!", e);
      // 程序退出
      System.exit(0);
    }
    // 监听管理端口
    while (true) {
      Socket sock = null;
      try {
        sock = listener.accept();
        // 读取指令
        sock.setSoTimeout(5000);
        BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
        String s = in.readLine();
        // 停止服务指令
        if (s.equals(Constant.SHUTDOWNCOMMAND)) {
          logger.info("-CommandServiceMain-- is stopping.");
          System.out.println("-CommandServiceMain- is stopping.");
          System.exit(0);
          break;
        }
      } catch (Exception e) {
        logger.error("查询状态时出错 " + e.getMessage(), e);
      } finally {
        try {
          sock.close();
        } catch (IOException e) {
          logger.error("监听管理端口异常:" + e.getMessage(), e);
        }
      }
    }
  }