📄 adminservice.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 + -