Example #1
0
        public override void Initialize(GameServer server)
        {
            base.Initialize(server);

            _guardTask               = GuardTask.Unknown;
            _server.Connected       += new ConnectedEventHandler(this.Connected);
            _server.Disconnected    += new DisconnectedEventHandler(this.Disconnected);
            _server.MessageReceived += new MessageReceivedEventHandler(this.MessageReceived);
            _server.Tick            += new TickEventHandler(this.Tick);
        }
Example #2
0
        private void Connected(GameServer server)
        {
            KProtocolHead protocol = new KProtocolHead();

            protocol.ProtocolId = (ushort)ProtocolDef.e2g_GetGuardDir_def;
            server.SendMessage(protocol);

            _guardTask        = GuardTask.Idle;
            _GameProcessState = GameProcessState.Unknown;

            switch (server.ConfigState)
            {
            case GameServer.ConfigGuardState.Configuring:
                SwitchGuardMode();
                //2008-3 huangbiao 只有在传输完配置文件后才更换状态
                //server.ConfigState = GameServer.ConfigGuardState.WaitResponse;
                //SetServerTime(0, DateTime.Now, GetLinuxZoneInfoFile());
                break;

            case GameServer.ConfigGuardState.None:
                SwitchGuardMode();
                server.ConfigState = GameServer.ConfigGuardState.WaitResponse;
                //SetServerTime(0, DateTime.Now, GetLinuxZoneInfoFile());
                break;

            case GameServer.ConfigGuardState.WaitResponse:
                SwitchGuardMode();
                break;

            case GameServer.ConfigGuardState.Configured:
                //得到服务器时间
                ////2008-3 huangbiao
                ////GetServerTime(1);
                break;
            }
        }
Example #3
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);
        }
Example #4
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));
 }
Example #5
0
 /// <summary>
 /// 执行系统命令
 /// </summary>
 bool ExecuteSystemCommand(int userId, string cmd, string input, GuardTask newTask, bool bNeedResult)
 {
     return(ExecuteSystemCommand(userId, cmd, input, newTask, null, false, bNeedResult));
 }
Example #6
0
 private void Disconnected(GameServer server)
 {
     _guardTask        = GuardTask.Unknown;
     _GameProcessState = GameProcessState.Unknown;
 }
Example #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;
            }
        }
Example #8
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);
		}
Example #9
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;
		}
Example #10
0
		/// <summary>
		/// 执行系统命令
		/// </summary>
		bool ExecuteSystemCommand(int userId, string cmd, string input, GuardTask newTask, bool bNeedResult)
		{
			return ExecuteSystemCommand(userId, cmd, input, newTask, null, false, bNeedResult);
		}
Example #11
0
		private void Disconnected(GameServer server)
		{
			_guardTask = GuardTask.Unknown;
			_GameProcessState = GameProcessState.Unknown;
		}
Example #12
0
		private void Connected(GameServer server)
		{
            KProtocolHead protocol = new KProtocolHead();
            protocol.ProtocolId = (ushort)ProtocolDef.e2g_GetGuardDir_def;
            server.SendMessage(protocol);

			_guardTask = GuardTask.Idle;
			_GameProcessState = GameProcessState.Unknown;

            switch (server.ConfigState)
            {
                case GameServer.ConfigGuardState.Configuring:
                    SwitchGuardMode();
                    //2008-3 huangbiao 只有在传输完配置文件后才更换状态
                    //server.ConfigState = GameServer.ConfigGuardState.WaitResponse;
                    //SetServerTime(0, DateTime.Now, GetLinuxZoneInfoFile());
                    break;
                case GameServer.ConfigGuardState.None:
                    SwitchGuardMode();
                    server.ConfigState = GameServer.ConfigGuardState.WaitResponse;
                    //SetServerTime(0, DateTime.Now, GetLinuxZoneInfoFile());
                    break;
                case GameServer.ConfigGuardState.WaitResponse:
                    SwitchGuardMode();
                    break;
                case GameServer.ConfigGuardState.Configured:
                    //得到服务器时间
                    ////2008-3 huangbiao
                    ////GetServerTime(1);
                    break;
            }
		}
Example #13
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;
			}
		}
Example #14
0
		public override void Initialize(GameServer server)
		{
			base.Initialize(server);

			_guardTask = GuardTask.Unknown;
			_server.Connected += new ConnectedEventHandler(this.Connected);
			_server.Disconnected += new DisconnectedEventHandler(this.Disconnected);
			_server.MessageReceived += new MessageReceivedEventHandler(this.MessageReceived);
            _server.Tick += new TickEventHandler(this.Tick);
		}