⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adminservice.java

📁 采用JAVA开发
💻 JAVA
字号:
package com.gctech.sms.platform;

import java.net.Socket;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.log4j.Logger;
import java.io.*;
import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;
import EDU.oswego.cs.dl.util.concurrent.BoundedBuffer;
import org.apache.log4j.PropertyConfigurator;
import java.util.Iterator;
import com.gctech.sms.msg.RegInfo;
import com.gctech.sms.vo.MoCommandObject;
import com.gctech.sms.util.MyClassLoader;
import com.gctech.sms.core.CommandStatus;
import com.gctech.sms.util.ThreadManager;
import com.gctech.sms.util.ConnectionManager;
import com.gctech.sms.core.Gateway;
import com.gctech.util.net.SocketService;
import java.util.List;
import java.util.Collection;

/**
 * <p>Title:AdminService </p>
 * <p>Description: 管理任务。</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: gctech</p>
 * @author 王红宝
 * @version $Id: AdminService.java,v 1.2 2004/05/11 02:13:23 wanghb Exp $
 */

public class AdminService extends SocketService{

  public void run(){
    String clientIp = sock.getInetAddress().getHostName();
    logger.info("Administrator login from "+clientIp+"\t\t\t\t\t\t[OK]");
    InputStream in = null;
    OutputStream out = null;
    try {
      in = sock.getInputStream();
      out = sock.getOutputStream();
      while (true) {
        out.write("[sms@MOServer]# ".getBytes());
        byte command[] = new byte[512];
        inner:
        for ( int i = 0; i < 512; i++ ){
          int rt = in.read(command, i, 1);
          if ( command[i] == '\n' || command[i] == '\r' ){
            in.read(command, i+1, 1);
            break inner;
          }
        }
        /**读命令*/
        String strcmd = new String(command).trim();
        logger.debug("haha");
        /**退出指令*/
        if (strcmd.equals("exit") || strcmd.equals("q")) {
          out.write("\n\rBye!\n\r".getBytes());
          break;
        }else if (strcmd.equals("shutdown") || strcmd.equals("x") ){
          Server.getInstance().shutdown();
          out.write("\n\rshutdown this SMS Server complete\n\r".getBytes());
          sock.close();
          System.exit(0);
        }else{
          /**执行相应指令*/
          out.write(this.proCommand(strcmd).getBytes());
        }
      }
    }
    catch (Throwable t) {
      logger.error(t, t);
    }finally{
      if ( in != null ){
        try {
          in.close();
        }
        catch (Throwable ex) {
          logger.error(ex, ex);
        }
      }
      if ( out != null ){
        try {
          out.close();
        }
        catch (Throwable ex1) {
          logger.error(ex1, ex1);
        }
      }
      if ( sock != null ){
        try {
          sock.close();
        }
        catch (Throwable ex2) {
          logger.error(ex2, ex2);
        }
      }
    }
    logger.info(" Administrator logout from "+clientIp+"\t\t\t\t\t\t[OK]");
  }
  String list(){

    try {
      StringBuffer rt = new StringBuffer("级别\tID\t长代码\t关键字\t业务处理类\t网关\t状态\n\r");
      Collection col = MODispatcher.getInstance().getAllCommand();
      //System.out.println(col.size());
      for (Iterator it = col.iterator();
           it.hasNext(); ) {
        //System.out.println("enter list command!");
        MoCommandObject mocmd = (MoCommandObject) it.next();
        rt.append(mocmd.getLevel()).append("\t")
            .append(mocmd.getID()).append("\t")
            .append(mocmd.getLongCode()).append("\t")
            .append(mocmd.getKeyWord()).append("\t")
            .append(mocmd.getClassName()).append("\t")
            .append(Gateway.valueToName(mocmd.getGateway())).append("\t")
            .append(CommandStatus.valueToName(mocmd.getStatus())).append("\n\r");
        //System.out.println(rt.toString());
      }
      //System.out.println(rt.toString());
      return rt.toString();
    }
    catch (Throwable ex) {
      logger.error(ex);
      return "系统错误:"+ex.getMessage();
    }
  }
  String help(){
    String useage = "Copyright (C) 2002-2003 GCTECH - sms\n\r"
          + "Type \"license\" for software license.\n\r"
          + "smsAdmin $Revision: 1.2 $ (2004年3月). 使用方法:\n\r"
          + "\thelp\t\t(\\?)\t显示帮助。\n\r"
          + "\texit\t\t(\\q)\t退出。\n\r"
          + "\trestart\t\t(\\r)\t重新启动服务器。\n\r"
          + "\tshutdown\t(\\x)\t关闭服务器。\n\r"
          + "\tlist\t\t(\\l)\t列出内存中的所有MO指令。\n\r"
          + "\tflush\t\t(\\f)\t重新载入MO命令指令和业务处理类。\n\r"
          + "\tgateway\t\t(\\g)\t列出连到服务器上的网关。\n\r"
          + "\tpcode\t\t(\\p)\t重新载入服务代码。\n\r"
          + "\tthread\t\t(\\t)\t显示线程池信息。\n\r"
          + "\tdbcp\t\t(\\d)\t显示连接池信息。\n\r"
          + "\tmem\t\t(\\m)\t显示内存信息。\n\r";
    return useage;
  }
  String flush(){
    MODispatcher.getInstance().reloadCommand();
    String strReturn = "\n\rMO指令载入成功。\n\r";
    return strReturn;
  }
  String gateway(){
    String strReturn = "\n\r";
    for ( Iterator it = Server.getInstance().gateWayInfo().iterator(); it.hasNext(); ){
      RegInfo reg = (RegInfo)it.next();
      strReturn = strReturn + "网关号:"+reg.gateWayName+"["+reg.gateway+"],中文说明:"+reg.gateWayDesc + "\n\r";
    }
    return strReturn;
  }
  String pcode(){
    MTDispatcher.getInstance().reloadService();
    return "载入业务代码成功!\n\r";
  }
  public String proCommand(String strcmdLine) {
    if (strcmdLine.length() == 0) {
      return "";
    }
    String[] allWord = strcmdLine.split(" ");
    String strcmd = allWord[0];

    if (strcmd.equals("help") || strcmd.equals("h") || strcmd.equals("?")) {
      return help();
    }else if ( strcmd.equals("dbcp") || strcmd.equals("d") ){
      return ConnectionManager.getInstance().getPoolInfo();
    }else if( strcmd.equals("list") || strcmd.equals("l") ){
      return list();
    }else if (strcmd.equals("flush") || strcmd.equals("f")) {
      return flush();
    }else if (strcmd.equals("gateway") || strcmd.equals("g") ) {
      return gateway();
    }else if ( strcmd.equals("mem") || strcmd.equals("m")){
      return mem();
    }else if ( strcmd.equals("pcode") || strcmd.equals("p") ){
      return pcode();
    }else if(strcmd.equals("restart") || strcmd.equals("r")){
      return restart();
    }else if ( strcmd.equals("thread") || strcmd.equals("t")){
      return ThreadManager.getInstance().getThreadPoolInfo();
    }else {
      //需要加上相应的程序
      return "'" + strcmd +
          "' 不是一个命令!\n\r";
    }
  }
  String mem(){
    Runtime runtime = Runtime.getRuntime();
    return "内存使用情况:\r\n"+
          "当前使用内存:"+runtime.totalMemory()/1000L+"k\r\n"+
          "最大内存:"+runtime.maxMemory()/1000L+"k\r\n"+
          "空闲内存:"+runtime.freeMemory()/1000L+"k\r\n";

  }
  public String restart(){
    int rt = Server.getInstance().restart();
    if ( rt == 0 )
      return "重新启动服务器成功!\n\r";
    else
      return "启动服务器失败"+rt+"\n\r";
  }
  static final Logger logger = Logger.getLogger(AdminService.class);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -