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); } }
/// <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); }
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; }
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]); }
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; } }
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 }
private void Disconnected(GameServer server) { _guardTask = GuardTask.Unknown; _GameProcessState = GameProcessState.Unknown; }
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); }
/// <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; }
private void Disconnected(GameServer server) { _guardTask = GuardTask.Unknown; _GameProcessState = GameProcessState.Unknown; }
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; } }
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; } }