88 lines
3.5 KiB
TypeScript
88 lines
3.5 KiB
TypeScript
/**
|
|
* 命令行工具用于开发调试
|
|
*/
|
|
import * as readline from "readline";
|
|
import SKDataUtil from "../gear/SKDataUtil";
|
|
import SKLogger from "../gear/SKLogger";
|
|
import GameUtil from "../core/GameUtil";
|
|
import Launch from "../core/Launch";
|
|
import PlayerMgr from "../object/PlayerMgr";
|
|
|
|
export default class Command {
|
|
|
|
static shared = new Command();
|
|
readline: any;
|
|
|
|
constructor() {
|
|
}
|
|
// 启动
|
|
launch() {
|
|
this.readline = readline.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout
|
|
});
|
|
let self = this;
|
|
this.readline.on('line', function (line: any) {
|
|
let cmd:string = line.trim()
|
|
let params=cmd.split(" ");
|
|
if(params.length>0){
|
|
cmd=params.shift();
|
|
}
|
|
switch (cmd) {
|
|
case 'save_all':
|
|
SKLogger.info(`服务器[${GameUtil.serverName}]正在存档!`);
|
|
Launch.shared.saveAll(() => {
|
|
let msg = `服务器[${GameUtil.serverName}]存档完成:机器人数[${GameUtil.robotCount}]在线玩家数[${GameUtil.online}]失败总数[${GameUtil.saveFailed.length}]存档总数[${GameUtil.saveTotal}]`;
|
|
SKLogger.info(msg)
|
|
});
|
|
break;
|
|
case "mem":
|
|
let rss = process.memoryUsage().rss;
|
|
let mem = (rss / (1024 * 1024)).toFixed(2) + 'm';
|
|
SKLogger.debug(`内存使用:${mem}`);
|
|
break;
|
|
case "clear_task":
|
|
if (GameUtil.serverType != 'game') {
|
|
console.warn(`清理玩家任务:非游戏服!`);
|
|
return;
|
|
}
|
|
let roleId:number=SKDataUtil.numberBy(params[0]);
|
|
let player=PlayerMgr.shared.getPlayerByRoleId(roleId);
|
|
if(player==null){
|
|
console.warn(`清理玩家任务:玩家不存在!`);
|
|
return;
|
|
}
|
|
if(player.taskMgr==null){
|
|
console.warn(`清理玩家任务:玩家[${player.roleid}:${player.name}]无任务管理器!`);
|
|
return;
|
|
}
|
|
player.taskMgr.reset();
|
|
break;
|
|
case "close":
|
|
SKLogger.info(`正在关闭服务器[${GameUtil.serverName}]!`);
|
|
if (GameUtil.serverType == 'game') {
|
|
if (GameUtil.isClose) {
|
|
return;
|
|
}
|
|
GameUtil.isClose = true;
|
|
Launch.shared.close(() => {
|
|
let msg = `服务器[${GameUtil.serverName}]关服完成:机器人数[${GameUtil.robotCount}]在线玩家数[${GameUtil.online}]失败总数[${GameUtil.saveFailed.length}]存档总数[${GameUtil.saveTotal}]`;
|
|
SKLogger.info(msg);
|
|
})
|
|
}
|
|
if (GameUtil.serverType == 'gate') {
|
|
self.readline.close();
|
|
}
|
|
break;
|
|
default:
|
|
SKLogger.debug(`无效的命令:[${cmd}]!`);
|
|
break;
|
|
}
|
|
});
|
|
|
|
this.readline.on("close", () => {
|
|
SKLogger.debug('命令行关闭');
|
|
process.exit(0);
|
|
});
|
|
}
|
|
} |