/** * 命令行工具用于开发调试 */ 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); }); } }