diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index cb05916ee0..af85ff921f 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -1,3 +1,4 @@ +using Content.Client._CP14.Discord; using Content.Client.Administration.Managers; using Content.Client.Changelog; using Content.Client.Chat.Managers; @@ -43,6 +44,9 @@ namespace Content.Client.Entry { public sealed class EntryPoint : GameClient { + //CP14 + [Dependency] private readonly DiscordAuthManager _discordAuth = default!; + //CP14 end [Dependency] private readonly IBaseClient _baseClient = default!; [Dependency] private readonly IGameController _gameController = default!; [Dependency] private readonly IStateManager _stateManager = default!; @@ -160,7 +164,10 @@ namespace Content.Client.Entry _parallaxManager.LoadDefaultParallax(); - _overlayManager.AddOverlay(new CP14BasePostProcessOverlay()); // CP14-PostProcess + //CP14 + _overlayManager.AddOverlay(new CP14BasePostProcessOverlay()); + _discordAuth.Initialize(); + //CP14 end _overlayManager.AddOverlay(new SingularityOverlay()); _overlayManager.AddOverlay(new RadiationPulseOverlay()); _chatManager.Initialize(); diff --git a/Content.Client/IoC/ClientContentIoC.cs b/Content.Client/IoC/ClientContentIoC.cs index 370188e3c6..0756800d8d 100644 --- a/Content.Client/IoC/ClientContentIoC.cs +++ b/Content.Client/IoC/ClientContentIoC.cs @@ -1,3 +1,4 @@ +using Content.Client._CP14.Discord; using Content.Client.Administration.Managers; using Content.Client.Changelog; using Content.Client.Chat.Managers; @@ -33,6 +34,9 @@ namespace Content.Client.IoC { var collection = IoCManager.Instance!; + //CP14 + collection.Register(); + //CP14 end collection.Register(); collection.Register(); collection.Register(); diff --git a/Content.Client/_CP14/Discord/CP14DiscordAuthManager.cs b/Content.Client/_CP14/Discord/CP14DiscordAuthManager.cs new file mode 100644 index 0000000000..a627ffe2e4 --- /dev/null +++ b/Content.Client/_CP14/Discord/CP14DiscordAuthManager.cs @@ -0,0 +1,27 @@ +using Content.Shared._CP14.Discord; +using Robust.Client.State; +using Robust.Shared.Network; + +namespace Content.Client._CP14.Discord; + +public sealed class DiscordAuthManager +{ + [Dependency] private readonly IClientNetManager _netManager = default!; + [Dependency] private readonly IStateManager _stateManager = default!; + + public string AuthUrl { get; private set; } = ""; + + public void Initialize() + { + _netManager.RegisterNetMessage(); + _netManager.RegisterNetMessage(OnDiscordAuthRequired); + } + + private void OnDiscordAuthRequired(MsgDiscordAuthRequired msg) + { + if (_stateManager.CurrentState is DiscordAuthState) + return; + AuthUrl = msg.AuthUrl; + _stateManager.RequestStateChange(); + } +} diff --git a/Content.Client/_CP14/Discord/CP14DiscordAuthState.cs b/Content.Client/_CP14/Discord/CP14DiscordAuthState.cs new file mode 100644 index 0000000000..33e439dc86 --- /dev/null +++ b/Content.Client/_CP14/Discord/CP14DiscordAuthState.cs @@ -0,0 +1,36 @@ +using System.Threading; +using Content.Shared._CP14.Discord; +using Robust.Client.State; +using Robust.Client.UserInterface; +using Robust.Shared.Network; +using Timer = Robust.Shared.Timing.Timer; + +namespace Content.Client._CP14.Discord; + +public sealed class DiscordAuthState : State +{ + [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; + [Dependency] private readonly IClientNetManager _netManager = default!; + + private DiscordAuthGui? _gui; + private readonly CancellationTokenSource _checkTimerCancel = new(); + + protected override void Startup() + { + _gui = new DiscordAuthGui(); + _userInterfaceManager.StateRoot.AddChild(_gui); + + Timer.SpawnRepeating(TimeSpan.FromSeconds(5), + () => + { + _netManager.ClientSendMessage(new MsgDiscordAuthCheck()); + }, + _checkTimerCancel.Token); + } + + protected override void Shutdown() + { + _checkTimerCancel.Cancel(); + _gui!.Dispose(); + } +} diff --git a/Content.Client/_CP14/Discord/DiscordAuthGui.xaml b/Content.Client/_CP14/Discord/DiscordAuthGui.xaml new file mode 100644 index 0000000000..5e266d638e --- /dev/null +++ b/Content.Client/_CP14/Discord/DiscordAuthGui.xaml @@ -0,0 +1,29 @@ + + + + + + +