Esempio n. 1
0
        private Color GetBackgroundColor(GameProcessState state, double brightness)
        {
            switch (state)
            {
            case GameProcessState.InForeground:
                return(Game.Colors.Hud.Transform(brightness));

            case GameProcessState.InBackground:
                return(Game.Colors.Hud);

            default:
                return(Color.Black);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 检查游戏进程是否存在
        /// </summary>
        bool CheckGame(int userId)
        {
            if (_server.IsConnected)
            {
                string cmdText = ShellScriptManager.TheInstance.GetScript("CheckGame", _server.SystemName);
                if (cmdText != null)
                {
                    if (ExecuteSystemCommand(userId, cmdText, string.Empty, GuardTask.CheckGame, true))
                    {
                        _GameProcessState = GameProcessState.Checking;
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 3
0
        protected override void OnRender(ChromaCanvas canvas)
        {
            if (Game.ProcessState != _lastState)
            {
                StartAnimation();
                _animKbdC1 = GetBackgroundColor(_lastState, Colors.KeyboardDimBrightness);
                _animDevC1 = GetBackgroundColor(_lastState, Colors.DeviceDimBrightness);
                _lastState = Game.ProcessState;
            }

            if (Animated && AnimationElapsed >= _fadeDuration)
            {
                StopAnimation();
            }

            _animKbdC2 = GetBackgroundColor(Game.ProcessState, Colors.KeyboardDimBrightness);
            _animDevC2 = GetBackgroundColor(Game.ProcessState, Colors.DeviceDimBrightness);

            var cLogo = Game.InMainMenu ? GameColors.EliteOrange : Game.Colors.Hud;

            Color cKbd = Animated
                ? PulseColor(_animKbdC1, _animKbdC2, _fadeDuration, PulseColorType.Sawtooth)
                : _animKbdC2;

            Color cDev = Animated
                ? PulseColor(_animDevC1, _animDevC2, _fadeDuration, PulseColorType.Sawtooth)
                : _animDevC2;

            canvas.Keyboard.Set(cKbd);
            canvas.Mouse.Set(cDev);
            canvas.Mousepad.Set(cDev);
            canvas.Keypad.Set(cKbd);
            canvas.Headset.Set(cDev);
            canvas.ChromaLink.Set(cDev);
            var k = canvas.Keyboard;

            k[Key.Logo] = cLogo;
        }
Esempio n. 4
0
        public async Task BackgroundLayerSetsAColorPerGameProcessState(GameProcessState processState, int rgbColor, double brightness)
        {
            var graphicsConfig = GraphicsConfig.FromFile(_gif.GraphicsConfiguration.FullName);

            var le = new LayeredEffect();

            le.Add(new BackgroundLayer());

            var chroma = new Mock <IChroma> {
                DefaultValue = DefaultValue.Mock
            };

            CustomKeyboardEffect keyboard;

            Mock.Get(chroma.Object.Keyboard)
            .Setup(x => x.SetCustomAsync(It.IsAny <CustomKeyboardEffect>()))
            .Callback((CustomKeyboardEffect c) => keyboard = c);

            var game = new GameState
            {
                ProcessState = processState,
                GuiColour    = graphicsConfig.GuiColour.Default,
            };

            var state = new LayerRenderState(game, new ChromaColors());

            game.Now = DateTimeOffset.UtcNow;
            await le.Render(chroma.Object, state).ConfigureAwait(false);

            Assert.Equal(Color.Black, keyboard[0]);

            var expectedColor = Color.FromRgb((uint)rgbColor).Transform(brightness);

            game.Now += TimeSpan.FromSeconds(1);
            await le.Render(chroma.Object, state).ConfigureAwait(false);

            Assert.Equal(expectedColor, keyboard[0]);
        }
Esempio n. 5
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;
            }
        }
Esempio n. 6
0
        public async Task GameInBackgroundLayerSetsAColorPerGameProcessState(bool wasInBackground, GameProcessState processState, int?startRgbColor, int?endRgbColor)
        {
            const double fadeDurationSeconds = 1;

            var expectedStartColor = startRgbColor.HasValue ? Color.FromRgb((uint)startRgbColor.Value) : (Color?)null;
            var expectedEndColor   = endRgbColor.HasValue ? Color.FromRgb((uint)endRgbColor.Value) : (Color?)null;

            var graphicsConfig = GraphicsConfig.FromFile(_gif.GraphicsConfiguration.FullName);

            var bl = new GameInBackroundLayer();

            bl.SetPrivateField("_inBackground", wasInBackground);

            var le = new LayeredEffect();

            le.Add(bl);

            var chroma = new Mock <IChroma> {
                DefaultValue = DefaultValue.Mock
            };

            CustomKeyboardEffect?keyboard = null;

            Mock.Get(chroma.Object.Keyboard)
            .Setup(x => x.SetCustomAsync(It.IsAny <CustomKeyboardEffect>()))
            .Callback((CustomKeyboardEffect c) => keyboard = c);

            var game = new GameState
            {
                ProcessState = processState,
                GuiColour    = graphicsConfig.GuiColour.Default,
            };

            var state = new LayerRenderState(game, new ChromaColors());

            game.Now = DateTimeOffset.UtcNow;
            await le.Render(chroma.Object, state).ConfigureAwait(false);

#pragma warning disable CA1508
            Assert.Equal(expectedStartColor, keyboard?[(Key)0]);
#pragma warning restore CA1508

            keyboard  = null;
            game.Now += TimeSpan.FromSeconds(fadeDurationSeconds);
            await le.Render(chroma.Object, state).ConfigureAwait(false);

#pragma warning disable CA1508
            Assert.Equal(expectedEndColor, keyboard?[(Key)0]);
#pragma warning restore CA1508
        }
Esempio n. 7
0
 private void Disconnected(GameServer server)
 {
     _guardTask        = GuardTask.Unknown;
     _GameProcessState = GameProcessState.Unknown;
 }
Esempio n. 8
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;
            }
        }
 private void GameProcessWatcher_Changed(object sender, GameProcessState e)
 {
     _gameState.ProcessState = e;
     OnChanged(ChangeType.GameProcessState);
 }
Esempio n. 10
0
		/// <summary>
		/// 检查游戏进程是否存在
		/// </summary>
		bool CheckGame(int userId)
		{
			if (_server.IsConnected)
			{
                string cmdText = ShellScriptManager.TheInstance.GetScript("CheckGame", _server.SystemName);
				if (cmdText != null)
				{
					if (ExecuteSystemCommand(userId,cmdText, string.Empty, GuardTask.CheckGame, true))
					{
						_GameProcessState = GameProcessState.Checking;
						return true;
					}
				}
			}

			return false;
		}
Esempio n. 11
0
		private void Disconnected(GameServer server)
		{
			_guardTask = GuardTask.Unknown;
			_GameProcessState = GameProcessState.Unknown;
		}
Esempio n. 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;
            }
		}
Esempio n. 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;
			}
		}