xy-server/game/common/Command.ts
2025-04-23 09:34:08 +08:00

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);
});
}
}