Exemplo n.º 1
0
 /// <summary>
 /// 执行系统命令(不记录日志)
 /// </summary>
 /// <param name="cmd">命令</param>
 /// <param name="input">输入</param>
 /// <param name="newTask">任务</param>
 bool ExecuteSystemCommand(int userId, string cmd, string input, GuardTask newTask, ExeSysCmdComplete exeSysCmdComplete, bool bNeedResult)
 {
     return(ExecuteSystemCommand(userId, cmd, input, newTask, exeSysCmdComplete, false, bNeedResult));
 }
Exemplo n.º 2
0
        /// <summary>
        /// 执行系统命令
        /// </summary>
        /// <param name="cmd">命令</param>
        /// <param name="input">输入</param>
        /// <param name="newTask">任务</param>
        /// <param name="needLog">是否需要记录日志</param>
        /// <param name="bNeedResult">是否需要反馈结果</param>
        bool ExecuteSystemCommand(int userId, string cmd, string input, GuardTask newTask, ExeSysCmdComplete exeSysCmdComplete, bool needLog, bool bNeedResult)
        {
            if (cmd == null)
            {
                throw new ArgumentNullException("cmd");
            }
            if (input == null)
            {
                input = string.Empty;
            }

            bool result = false;

            //TODO: if (_server.IsConnected && _guardTask == GuardTask.Idle)
            if (_server.IsConnected)
            {
                IProtocol realProtocol = null;
                if (cmd.Length >= 1024)
                {
                    e2g_exesyscmd_large protocol = new e2g_exesyscmd_large();
                    protocol.Command     = cmd;
                    protocol.InputBuff   = input;
                    protocol.bNeedOutput = Convert.ToUInt16(bNeedResult);

                    realProtocol = protocol;
                }
                else
                {
                    e2g_exesyscmd protocol = new e2g_exesyscmd();
                    protocol.Command     = cmd;
                    protocol.InputBuff   = input;
                    protocol.bNeedOutput = Convert.ToUInt16(bNeedResult);

                    realProtocol = protocol;
                }

                if (_server.SendMessage(realProtocol))
                {
                    _lastSystemCommand      = cmd;
                    _lastSystemCommandInput = input;
                    _sysCmdOutput.Length    = 0;
                    _exeSysCmdComplete      = exeSysCmdComplete;

                    _guardTask = newTask;

                    result = true;
                }
            }

            if (needLog)
            {
                User user = AdminServer.TheInstance.SecurityManager.GetUser(userId);
                Security.LogSystem.TheInstance.WriteLog(
                    userId,
                    Security.OpType.EXECUTE,
                    _server.Id,
                    string.Format(StringDef.LogMessageExecuteSystemCommand,
                                  user == null ? userId.ToString() : user.UserName,
                                  _server.Name,
                                  cmd,
                                  result ? StringDef.Success : StringDef.Fail)
                    );
            }
            return(result);
        }
Exemplo n.º 3
0
        public override bool DoAction(int userId, string actionKey, ref object outArg, params object[] args)
        {
            switch (actionKey)
            {
            case ActionKeyExeSysCmd:
                //if (args.Length >= 4) _exeSysCmdAutomation = args[3] as ExeSysCmdAutomation;
                ExeSysCmdComplete exeSysCmdComplete = null;
                if (args.Length == 4)
                {
                    exeSysCmdComplete = args[3] as ExeSysCmdComplete;
                }
                return(ExecuteSystemCommand(userId, args[0] as string, args[1] as string, (GuardTask)args[2], exeSysCmdComplete, true));

            case ActionKeyStartGame:
                return(StartGame(userId));

            case ActionKeyStopGame:
                return(StopGame(userId));

            case ActionKeyUpdateGame:
                return(UpdateGame(userId, args[0] as string));

            case ActionKeyCheckGame:
                return(CheckGame(userId));

            case ActionKeyGetStackTrace:
                return(GetStackStrace(userId));

            case ActionKeyRefreshUploadDir:
                return(RefreshUploadDir(userId, args[0] as string));

            case ActionKeyDeleteUploadDirFile:
                return(DeleteUploadDirFile(userId, args[0] as string));

            case ActionKeyRenemeUploadDirFile:
                return(RenemeUploadDirFile(userId, args[0] as string, args[1] as string));

            case ActionKeyUpdateGuard:
                return(UpdateGuard(userId));

            case ActionKeyBackupDb:
                return(BackupDb(userId, (int)args[0]));

            case ActionKeyRollbackDb:
                return(RollbackDb(userId, (string)args[0]));

            case ActionKeyRestartDb:
                return(RestartDb(userId));

            case ActionKeyRestartServer:
                return(RestartServer(userId));

            case ActionKeyReconfigureGuard:
                return(ReconfigreGuard(userId));

            case ActionKeySetServerTime:
                return(SetServerTime(userId, (DateTime)args[0], (string)args[1]));

                ////2008-3 huangbiao
                ////case ActionKeyGetServerTime:
                ////    return GetServerTime(userId);
            }

            throw new Exception(string.Format("ActionKey {0} does not exist.", actionKey));
        }
Exemplo n.º 4
0
        private void MessageReceived(GameServer server, IProtocol message)
        {
            switch ((ProtocolDef)message.ProtocolId)
            {
            case ProtocolDef.g2e_exesyscmd_def:
            {
                g2e_exesyscmd protocol   = message as g2e_exesyscmd;
                FSEyeResult   returnCode = (FSEyeResult)protocol.ReturnCode;

                switch (_guardTask)
                {
                case GuardTask.Unknown:
                case GuardTask.Idle:
                //设置时间服务器断连后的回包处理
                //if (returnCode == FSEyeResult.g2e_ExeSysCmd_done) break;
                //throw new Exception("State Exception");
                case GuardTask.StartGameServer:
                    switch (returnCode)
                    {
                    case FSEyeResult.g2e_ExeSysCmd_done:
                        _guardTask = GuardTask.Idle;
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_busy:
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_result:
                        AppendSysCmdOutput(protocol.OutputBuff);
                        break;
                    }
                    break;

                case GuardTask.DoNormalSysCmd:
                    switch (returnCode)
                    {
                    case FSEyeResult.g2e_ExeSysCmd_done:
                        _guardTask = GuardTask.Idle;
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_busy:
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_result:
                        AppendSysCmdOutput(protocol.OutputBuff);
                        break;
                    }
                    break;

                case GuardTask.UpdateGameServer:
                    switch (returnCode)
                    {
                    case FSEyeResult.g2e_ExeSysCmd_done:
                    {
                        _guardTask = GuardTask.Idle;
                        if (_updateGameResult.ToString().Contains("fail"))
                        {
                            server.AppendMessage(string.Format("UpdateGameFail\nFailureMessage:\"{0}\"", _updateGameResult.ToString()), GameServer.MessageInfo.Type.Failure);

                            //触发UpdateGameFail事件
                            AutomationContext context = new AutomationContext();
                            context.Message = string.Format("{0} UpdateGameFail\nFailureMessage:\"{1}\"", server.ToString(), _updateGameResult.ToString());;
                            context.Server  = server;
                            AdminServer.TheInstance.StrategyManager.OnEvent(FSEyeEvent.UpdateGameFail, context);
                        }
                        else
                        {
                            server.AppendMessage("UpdateGameSucceed", GameServer.MessageInfo.Type.Success);

                            //触发UpdateGameSucceed事件
                            AutomationContext context = new AutomationContext();
                            context.Message = string.Format("{0} UpdateGameSucceed", server.ToString());
                            context.Server  = server;
                            AdminServer.TheInstance.StrategyManager.OnEvent(FSEyeEvent.UpdateGameSucceed, context);
                        }
                    }
                    break;

                    case FSEyeResult.g2e_ExeSysCmd_busy:
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_result:
                        _updateGameResult.Append(protocol.OutputBuff);
                        break;
                    }
                    break;

                case GuardTask.RefreshUploadDirFileInfo:
                    switch (returnCode)
                    {
                    case FSEyeResult.g2e_ExeSysCmd_done:
                        _guardTask = GuardTask.Idle;
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_busy:
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_result:
                        _uploadDirInfo += protocol.OutputBuff;
                        break;
                    }
                    break;

                case GuardTask.CheckGame:
                    switch (returnCode)
                    {
                    case FSEyeResult.g2e_ExeSysCmd_done:
                        _guardTask        = GuardTask.Idle;
                        _GameProcessState = (protocol.OutputBuff.Length > 0) ? GameProcessState.Exist : GameProcessState.NotExist;
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_busy:
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_result:
                        break;
                    }
                    break;

                case GuardTask.GetStatckStrace:
                    switch (returnCode)
                    {
                    case FSEyeResult.g2e_ExeSysCmd_done:
                        _guardTask          = GuardTask.Idle;
                        _getStackTraceState = GetStackTraceState.Done;
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_busy:
                        break;

                    case FSEyeResult.g2e_ExeSysCmd_result:
                        _stackTrace.Append(protocol.OutputBuff);
                        break;
                    }
                    break;

                ////2008-03 huangbiao 去掉getTime任务
                case GuardTask.GetServerTime:
                    ////    switch (returnCode)
                    ////    {
                    ////        case FSEyeResult.g2e_ExeSysCmd_done:
                    ////            _guardTask = GuardTask.Idle;
                    ////            break;
                    ////        case FSEyeResult.g2e_ExeSysCmd_busy:
                    ////            GetServerTime(1);
                    ////            break;
                    ////        case FSEyeResult.g2e_ExeSysCmd_result:
                    ////            try
                    ////            {
                    ////                string dateText = protocol.OutputBuff.TrimEnd('\n').Replace('_', ' ');
                    ////                _serverTimeSpan = DateTime.Now.Subtract(DateTime.Parse(dateText));
                    ////            }
                    ////            catch (Exception ex)
                    ////            {
                    ////                throw (ex);
                    ////            }
                    ////            break;
                    ////    }
                    break;

                default:
                    throw new Exception("State Exception");
                }

                switch (returnCode)
                {
                case FSEyeResult.g2e_ExeSysCmd_done:
                    if (_exeSysCmdComplete != null)
                    {
                        _exeSysCmdComplete(_server, true, _sysCmdOutput.ToString());
                        _exeSysCmdComplete = null;
                    }
                    break;

                case FSEyeResult.g2e_ExeSysCmd_busy:
                    if (_exeSysCmdComplete != null)
                    {
                        _exeSysCmdComplete(_server, false, "busy");
                        _exeSysCmdComplete = null;
                    }
                    break;

                case FSEyeResult.g2e_ExeSysCmd_result:
                    break;
                }
            }
            break;

            case ProtocolDef.g2e_GetGuardDir_def:
            {
                g2e_GetGuardDir protocol = message as g2e_GetGuardDir;
                server.GuardDir = protocol.GuardDir;
            }
            break;

            case ProtocolDef.g2e_switchmode_def:
            {
                server.AppendMessage(StringDef.StopConfigGuard, GameServer.MessageInfo.Type.Normal);

                AdminServer.TheInstance.GameServerManager.SendServerConfigFile(server);

                foreach (GameServer svr in AdminServer.TheInstance.GameServerManager._gameServerList)
                {
                    if (svr.IpAddress == server.IpAddress)
                    {
                        svr.ConfigState = GameServer.ConfigGuardState.Configured;
                        AdminServer.TheInstance.GameServerManager.ModifyGameServer(svr, svr.Name, svr.Comment, svr.IpAddress, svr.GameDir, svr.Group, svr.LordConfig, svr.ConfigState, svr.ConfigContent, svr.Type, svr.FtpServer);
                    }
                }
            }
            break;

            case ProtocolDef.g2e_config_def:
            {
                //TODO 提示重新配置Guard成功
                UpdateGuard(0);
            }
            break;

            default:
                break;
            }
        }
Exemplo n.º 5
0
		/// <summary>
		/// 执行系统命令
		/// </summary>
		/// <param name="cmd">命令</param>
		/// <param name="input">输入</param>
		/// <param name="newTask">任务</param>
		/// <param name="needLog">是否需要记录日志</param>
        /// <param name="bNeedResult">是否需要反馈结果</param>
        bool ExecuteSystemCommand(int userId,string cmd, string input, GuardTask newTask, ExeSysCmdComplete exeSysCmdComplete, bool needLog, bool bNeedResult)
		{
			if (cmd == null)
				throw new ArgumentNullException("cmd");
			if (input == null)
				input = string.Empty;

            bool result = false;

            //TODO: if (_server.IsConnected && _guardTask == GuardTask.Idle)
			if (_server.IsConnected)
			{
				IProtocol realProtocol = null;
				if (cmd.Length >= 1024)
				{
					e2g_exesyscmd_large protocol = new e2g_exesyscmd_large();
					protocol.Command = cmd;
					protocol.InputBuff = input;
                    protocol.bNeedOutput = Convert.ToUInt16(bNeedResult);

					realProtocol = protocol;
				}
				else
				{
					e2g_exesyscmd protocol = new e2g_exesyscmd();
					protocol.Command = cmd;
					protocol.InputBuff = input;
                    protocol.bNeedOutput = Convert.ToUInt16(bNeedResult);

					realProtocol = protocol;
				}

				if (_server.SendMessage(realProtocol))
				{
					_lastSystemCommand = cmd;
					_lastSystemCommandInput = input;
					_sysCmdOutput.Length = 0;
					_exeSysCmdComplete = exeSysCmdComplete;

					_guardTask = newTask;
                    					
                    result = true;
				}
			}

			if (needLog)
			{
                User user = AdminServer.TheInstance.SecurityManager.GetUser(userId);
                Security.LogSystem.TheInstance.WriteLog(
                    userId,
                    Security.OpType.EXECUTE,
                    _server.Id,
                    string.Format(StringDef.LogMessageExecuteSystemCommand,
                        user == null ? userId.ToString() : user.UserName,
                        _server.Name,
                        cmd,
                        result ? StringDef.Success : StringDef.Fail)
                );
			}
			return result;
		}
Exemplo n.º 6
0
		/// <summary>
		/// 执行系统命令(不记录日志)
		/// </summary>
		/// <param name="cmd">命令</param>
		/// <param name="input">输入</param>
		/// <param name="newTask">任务</param>
		bool ExecuteSystemCommand(int userId, string cmd, string input, GuardTask newTask, ExeSysCmdComplete exeSysCmdComplete, bool bNeedResult)
		{
			return ExecuteSystemCommand(userId, cmd, input, newTask, exeSysCmdComplete, false, bNeedResult);
		}
Exemplo n.º 7
0
		private void MessageReceived(GameServer server, IProtocol message)
		{
			switch ((ProtocolDef)message.ProtocolId)
			{
				case ProtocolDef.g2e_exesyscmd_def:
					{
						g2e_exesyscmd protocol = message as g2e_exesyscmd;
						FSEyeResult returnCode = (FSEyeResult)protocol.ReturnCode;

						switch (_guardTask)
						{
							case GuardTask.Unknown:
							case GuardTask.Idle:
                                //设置时间服务器断连后的回包处理
                                //if (returnCode == FSEyeResult.g2e_ExeSysCmd_done) break;
								//throw new Exception("State Exception");
							case GuardTask.StartGameServer:
								switch (returnCode)
								{
									case FSEyeResult.g2e_ExeSysCmd_done:
										_guardTask = GuardTask.Idle;
										break;
									case FSEyeResult.g2e_ExeSysCmd_busy:
										break;
									case FSEyeResult.g2e_ExeSysCmd_result:
										AppendSysCmdOutput(protocol.OutputBuff);
										break;
								}
								break;
							case GuardTask.DoNormalSysCmd:
								switch (returnCode)
								{
									case FSEyeResult.g2e_ExeSysCmd_done:
										_guardTask = GuardTask.Idle;                                                                        
										break;
									case FSEyeResult.g2e_ExeSysCmd_busy:
										break;
									case FSEyeResult.g2e_ExeSysCmd_result:
										AppendSysCmdOutput(protocol.OutputBuff);
										break;
								}
								break;
							case GuardTask.UpdateGameServer:
								switch (returnCode)
								{
									case FSEyeResult.g2e_ExeSysCmd_done:
										{
											_guardTask = GuardTask.Idle;
											if (_updateGameResult.ToString().Contains("fail"))
											{
												server.AppendMessage(string.Format("UpdateGameFail\nFailureMessage:\"{0}\"", _updateGameResult.ToString()), GameServer.MessageInfo.Type.Failure);

												//触发UpdateGameFail事件
												AutomationContext context = new AutomationContext();
												context.Message = string.Format("{0} UpdateGameFail\nFailureMessage:\"{1}\"", server.ToString(), _updateGameResult.ToString()); ;
												context.Server = server;
												AdminServer.TheInstance.StrategyManager.OnEvent(FSEyeEvent.UpdateGameFail, context);
											}
											else
											{
												server.AppendMessage("UpdateGameSucceed", GameServer.MessageInfo.Type.Success);

												//触发UpdateGameSucceed事件
												AutomationContext context = new AutomationContext();
												context.Message = string.Format("{0} UpdateGameSucceed", server.ToString());
												context.Server = server;
												AdminServer.TheInstance.StrategyManager.OnEvent(FSEyeEvent.UpdateGameSucceed, context);
											}
										}
										break;
									case FSEyeResult.g2e_ExeSysCmd_busy:
										break;
									case FSEyeResult.g2e_ExeSysCmd_result:
										_updateGameResult.Append(protocol.OutputBuff);
										break;
								}
								break;
							case GuardTask.RefreshUploadDirFileInfo:
								switch (returnCode)
								{
									case FSEyeResult.g2e_ExeSysCmd_done:
										_guardTask = GuardTask.Idle;
                                        break;
									case FSEyeResult.g2e_ExeSysCmd_busy:
										break;
									case FSEyeResult.g2e_ExeSysCmd_result:
                                        _uploadDirInfo += protocol.OutputBuff;
										break;
								}
								break;
							case GuardTask.CheckGame:
								switch (returnCode)
								{
									case FSEyeResult.g2e_ExeSysCmd_done:
										_guardTask = GuardTask.Idle;
										_GameProcessState = (protocol.OutputBuff.Length > 0) ? GameProcessState.Exist : GameProcessState.NotExist;
										break;
									case FSEyeResult.g2e_ExeSysCmd_busy:
										break;
									case FSEyeResult.g2e_ExeSysCmd_result:
										break;
								}
								break;
							case GuardTask.GetStatckStrace:
								switch (returnCode)
								{
									case FSEyeResult.g2e_ExeSysCmd_done:
										_guardTask = GuardTask.Idle;
										_getStackTraceState = GetStackTraceState.Done;
										break;
									case FSEyeResult.g2e_ExeSysCmd_busy:
										break;
									case FSEyeResult.g2e_ExeSysCmd_result:
										_stackTrace.Append(protocol.OutputBuff);
										break;
								}
								break;

                            ////2008-03 huangbiao 去掉getTime任务
                            case GuardTask.GetServerTime:
                            ////    switch (returnCode)
                            ////    {
                            ////        case FSEyeResult.g2e_ExeSysCmd_done:
                            ////            _guardTask = GuardTask.Idle;
                            ////            break;
                            ////        case FSEyeResult.g2e_ExeSysCmd_busy:
                            ////            GetServerTime(1);
                            ////            break;
                            ////        case FSEyeResult.g2e_ExeSysCmd_result:
                            ////            try
                            ////            {
                            ////                string dateText = protocol.OutputBuff.TrimEnd('\n').Replace('_', ' ');
                            ////                _serverTimeSpan = DateTime.Now.Subtract(DateTime.Parse(dateText));
                            ////            }
                            ////            catch (Exception ex)
                            ////            {
                            ////                throw (ex);
                            ////            }
                            ////            break;
                            ////    }
                                break;
							default:
								throw new Exception("State Exception");
						}

						switch (returnCode)
						{
							case FSEyeResult.g2e_ExeSysCmd_done:
								if (_exeSysCmdComplete != null)
								{
									_exeSysCmdComplete(_server, true, _sysCmdOutput.ToString());
									_exeSysCmdComplete = null;
								}
								break;
							case FSEyeResult.g2e_ExeSysCmd_busy:
								if (_exeSysCmdComplete != null)
								{
									_exeSysCmdComplete(_server, false, "busy");
									_exeSysCmdComplete = null;
								}
								break;
							case FSEyeResult.g2e_ExeSysCmd_result:
								break;
						}
					}
					break;
				case ProtocolDef.g2e_GetGuardDir_def:
					{
						g2e_GetGuardDir protocol = message as g2e_GetGuardDir;
						server.GuardDir = protocol.GuardDir;
					}
					break;
				case ProtocolDef.g2e_switchmode_def:
					{

						server.AppendMessage(StringDef.StopConfigGuard, GameServer.MessageInfo.Type.Normal);

                        AdminServer.TheInstance.GameServerManager.SendServerConfigFile(server);
                        
                        foreach (GameServer svr in AdminServer.TheInstance.GameServerManager._gameServerList)
                        {
                            if (svr.IpAddress == server.IpAddress)
                            {
                                svr.ConfigState = GameServer.ConfigGuardState.Configured;
                                AdminServer.TheInstance.GameServerManager.ModifyGameServer(svr, svr.Name, svr.Comment, svr.IpAddress, svr.GameDir, svr.Group, svr.LordConfig, svr.ConfigState, svr.ConfigContent, svr.Type, svr.FtpServer);

                            }
                        }
					}
					break;
				case ProtocolDef.g2e_config_def:
					{
						//TODO 提示重新配置Guard成功
						UpdateGuard(0);
					}
					break;
				default:
					break;
			}
		}