From 50a78b3193feaf0d8cf4bf61ce44a28557c9233c Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Fri, 8 Dec 2017 12:47:13 -0500 Subject: [PATCH] Update ControlPanel to use the new IServerInterface --- TGS.ControlPanel/ControlPanel/ByondPage.cs | 8 +- TGS.ControlPanel/ControlPanel/ChatPage.cs | 8 +- TGS.ControlPanel/ControlPanel/ControlPanel.cs | 31 +++--- TGS.ControlPanel/ControlPanel/RepoPage.cs | 10 +- TGS.ControlPanel/ControlPanel/ServerPage.cs | 56 +++++----- TGS.ControlPanel/ControlPanel/StaticPage.cs | 18 +-- TGS.ControlPanel/InstanceSelector.Designer.cs | 1 - TGS.ControlPanel/InstanceSelector.cs | 104 ++++++------------ TGS.ControlPanel/Login.cs | 34 +++--- TGS.ControlPanel/Program.cs | 14 ++- TGS.ControlPanel/TestMergeManager.cs | 18 +-- 11 files changed, 136 insertions(+), 166 deletions(-) diff --git a/TGS.ControlPanel/ControlPanel/ByondPage.cs b/TGS.ControlPanel/ControlPanel/ByondPage.cs index 4935b7b3e4..f5ec5546d7 100644 --- a/TGS.ControlPanel/ControlPanel/ByondPage.cs +++ b/TGS.ControlPanel/ControlPanel/ByondPage.cs @@ -10,7 +10,7 @@ namespace TGS.ControlPanel string lastReadError = null; void InitBYONDPage() { - var BYOND = Interface.GetComponent(); + var BYOND = Instance.Byond; var CV = BYOND.GetVersion(ByondVersion.Installed); if (CV == null) CV = BYOND.GetVersion(ByondVersion.Staged); @@ -45,7 +45,7 @@ namespace TGS.ControlPanel private void UpdateButton_Click(object sender, EventArgs e) { UpdateBYONDButtons(); - if (!Interface.GetComponent().UpdateToVersion((int)MajorVersionNumeric.Value, (int)MinorVersionNumeric.Value)) + if (!Instance.Byond.UpdateToVersion((int)MajorVersionNumeric.Value, (int)MinorVersionNumeric.Value)) MessageBox.Show("Unable to begin update, there is another operation in progress."); } @@ -55,7 +55,7 @@ namespace TGS.ControlPanel } void UpdateBYONDButtons() { - var BYOND = Interface.GetComponent(); + var BYOND = Instance.Byond; VersionLabel.Text = BYOND.GetVersion(ByondVersion.Installed) ?? "Not Installed"; @@ -88,7 +88,7 @@ namespace TGS.ControlPanel UpdateButton.Enabled = false; break; } - var error = Interface.GetComponent().GetError(); + var error = Instance.Byond.GetError(); if (error != lastReadError) { lastReadError = error; diff --git a/TGS.ControlPanel/ControlPanel/ChatPage.cs b/TGS.ControlPanel/ControlPanel/ChatPage.cs index 96a666d5c6..d512d0d6ef 100644 --- a/TGS.ControlPanel/ControlPanel/ChatPage.cs +++ b/TGS.ControlPanel/ControlPanel/ChatPage.cs @@ -19,7 +19,7 @@ namespace TGS.ControlPanel void LoadChatPage() { updatingChat = true; - var Chat = Interface.GetComponent(); + var Chat = Instance.Chat; var PI = Chat.ProviderInfos()[(int)ModifyingProvider]; ChatAdminsTextBox.Visible = true; IRCModesComboBox.Visible = false; @@ -112,7 +112,7 @@ namespace TGS.ControlPanel private void ChatReconnectButton_Click(object sender, EventArgs e) { - Interface.GetComponent().Reconnect(ModifyingProvider); + Instance.Chat.Reconnect(ModifyingProvider); LoadChatPage(); } @@ -149,7 +149,7 @@ namespace TGS.ControlPanel } void SetAdminsAreSpecial(bool value) { - var Chat = Interface.GetComponent(); + var Chat = Instance.Chat; var PI = Chat.ProviderInfos()[(int)ModifyingProvider]; PI.AdminsAreSpecial = value; var res = Chat.SetProviderInfo(PI); @@ -208,7 +208,7 @@ namespace TGS.ControlPanel wip.Enabled = ChatEnabledCheckbox.Checked; wip.AdminsAreSpecial = AdminModeSpecial.Checked; - res = Interface.GetComponent().SetProviderInfo(wip); + res = Instance.Chat.SetProviderInfo(wip); } if (res != null) MessageBox.Show(res); diff --git a/TGS.ControlPanel/ControlPanel/ControlPanel.cs b/TGS.ControlPanel/ControlPanel/ControlPanel.cs index 5ebbf73f1b..8f9368a096 100644 --- a/TGS.ControlPanel/ControlPanel/ControlPanel.cs +++ b/TGS.ControlPanel/ControlPanel/ControlPanel.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using TGS.Interface; -using TGS.Interface.Components; namespace TGS.ControlPanel { @@ -18,29 +17,34 @@ namespace TGS.ControlPanel public static IDictionary InstancesInUse { get; private set; } = new Dictionary(); /// - /// The instance for this + /// The for this /// - readonly IServerInterface Interface; + readonly IInstance Instance; /// /// Constructs a /// - /// The for the - public ControlPanel(IServerInterface I) + /// The to use + /// The to use + public ControlPanel(IServer server, IInstance instance) { InitializeComponent(); + FormClosed += ControlPanel_FormClosed; - Interface = I; - if (Interface.IsRemoteConnection) - Text = String.Format("TGS {0}: {1}:{2}", Interface.ServerVersion, Interface.LoginInfo.IP, Interface.LoginInfo.Port); - Text = String.Format("{0} Instance: {1}", Text, I.InstanceName); Panels.SelectedIndexChanged += Panels_SelectedIndexChanged; Panels.SelectedIndex += Math.Min(Properties.Settings.Default.LastPageIndex, Panels.TabCount - 1); + + Instance = instance; + + InstancesInUse.Add(Instance.Metadata.Name, this); + + Text = String.Format("TGS {0} Instance: {1}", server.Version, Instance.Metadata.Name); + InitRepoPage(); InitBYONDPage(); InitServerPage(); + UpdateSelectedPanel(); - InstancesInUse.Add(I.InstanceName, this); } /// @@ -50,7 +54,7 @@ namespace TGS.ControlPanel /// The void ControlPanel_FormClosed(object sender, FormClosedEventArgs e) { - InstancesInUse.Remove(Interface.InstanceName); + InstancesInUse.Remove(Instance.Metadata.Name); } /// @@ -58,8 +62,7 @@ namespace TGS.ControlPanel /// void Cleanup() { - InstancesInUse.Remove(Interface.InstanceName); - Interface.Dispose(); + InstancesInUse.Remove(Instance.Metadata.Name); } private void Main_Resize(object sender, EventArgs e) @@ -102,7 +105,7 @@ namespace TGS.ControlPanel bool CheckAdminWithWarning() { - if (!Interface.ConnectToInstance().HasFlag(ConnectivityLevel.Administrator)) + if (Instance.Administration != null) { MessageBox.Show("Only system administrators may use this command!"); return false; diff --git a/TGS.ControlPanel/ControlPanel/RepoPage.cs b/TGS.ControlPanel/ControlPanel/RepoPage.cs index c6b5658e9d..5743cc5d17 100644 --- a/TGS.ControlPanel/ControlPanel/RepoPage.cs +++ b/TGS.ControlPanel/ControlPanel/RepoPage.cs @@ -76,7 +76,7 @@ namespace TGS.ControlPanel if (RepoBusyCheck()) return; - var Repo = Interface.GetComponent(); + var Repo = Instance.Repository; RepoProgressBar.Style = ProgressBarStyle.Marquee; RepoProgressBar.Visible = false; @@ -148,7 +148,7 @@ namespace TGS.ControlPanel bool RepoBusyCheck() { - if (Interface.GetComponent().OperationInProgress()) + if (Instance.Repository.OperationInProgress()) { DoAsyncOp(RepoAction.Wait, "Waiting for repository to finish another action..."); return true; @@ -170,7 +170,7 @@ namespace TGS.ControlPanel private void RepoBGW_DoWork(object sender, DoWorkEventArgs e) { //Only for clones - var Repo = Interface.GetComponent(); + var Repo = Instance.Repository; switch (action) { case RepoAction.Clone: @@ -273,7 +273,7 @@ namespace TGS.ControlPanel } private void RepoApplyButton_Click(object sender, EventArgs e) { - var Repo = Interface.GetComponent(); + var Repo = Instance.Repository; if (RepoBusyCheck()) return; @@ -344,7 +344,7 @@ namespace TGS.ControlPanel { if (MessageBox.Show("This will update the cached TGS3.json to the current repository version, potentially redefining symlinks. Proceed?", "Json Update", MessageBoxButtons.YesNo) != DialogResult.Yes) return; - var res = Interface.GetComponent().UpdateTGS3Json(); + var res = Instance.Repository.UpdateTGS3Json(); if (res != null) MessageBox.Show(res); } diff --git a/TGS.ControlPanel/ControlPanel/ServerPage.cs b/TGS.ControlPanel/ControlPanel/ServerPage.cs index 50a459c943..dee3c04e36 100644 --- a/TGS.ControlPanel/ControlPanel/ServerPage.cs +++ b/TGS.ControlPanel/ControlPanel/ServerPage.cs @@ -46,7 +46,7 @@ namespace TGS.ControlPanel private void CompileCancelButton_Click(object sender, EventArgs e) { - var res = Interface.GetComponent().Cancel(); + var res = Instance.Compiler.Cancel(); if (res != null) MessageBox.Show(res); LoadServerPage(); @@ -54,7 +54,7 @@ namespace TGS.ControlPanel void LoadServerPage() { - var RepoExists = Interface.GetComponent().Exists(); + var RepoExists = Instance.Repository.Exists(); compileButton.Visible = RepoExists; AutoUpdateCheckbox.Visible = RepoExists; initializeButton.Visible = RepoExists; @@ -83,16 +83,16 @@ namespace TGS.ControlPanel if (updatingFields) return; - var DM = Interface.GetComponent(); - var DD = Interface.GetComponent(); - var Config = Interface.GetComponent(); - var Repo = Interface.GetComponent(); + var DM = Instance.Compiler; + var DD = Instance.DreamDaemon; + var Config = Instance.Config; + var Repo = Instance.Repository; try { updatingFields = true; - ServerPathLabel.Text = "Server Path: " + Interface.GetComponent().ServerDirectory(); + ServerPathLabel.Text = "Server Path: " + Instance.ServerDirectory(); SecuritySelector.SelectedIndex = (int)DD.SecurityLevel(); @@ -197,13 +197,13 @@ namespace TGS.ControlPanel void UpdateProjectName() { if (!updatingFields) - Interface.GetComponent().SetProjectName(projectNameText.Text); + Instance.Compiler.SetProjectName(projectNameText.Text); } private void PortSelector_ValueChanged(object sender, EventArgs e) { if (!updatingFields) - Interface.GetComponent().SetPort((ushort)PortSelector.Value); + Instance.DreamDaemon.SetPort((ushort)PortSelector.Value); } private void ServerPageRefreshButton_Click(object sender, EventArgs e) @@ -213,13 +213,13 @@ namespace TGS.ControlPanel private void InitializeButton_Click(object sender, EventArgs e) { - if (!Interface.GetComponent().Initialize()) + if (!Instance.Compiler.Initialize()) MessageBox.Show("Unable to start initialization!"); LoadServerPage(); } private void CompileButton_Click(object sender, EventArgs e) { - if (!Interface.GetComponent().Compile()) + if (!Instance.Compiler.Compile()) MessageBox.Show("Unable to start compilation!"); LoadServerPage(); } @@ -227,7 +227,7 @@ namespace TGS.ControlPanel private void AutostartCheckbox_CheckedChanged(object sender, System.EventArgs e) { if (!updatingFields) - Interface.GetComponent().SetAutostart(AutostartCheckbox.Checked); + Instance.DreamDaemon.SetAutostart(AutostartCheckbox.Checked); } private void ServerStartButton_Click(object sender, System.EventArgs e) { @@ -239,7 +239,7 @@ namespace TGS.ControlPanel { try { - e.Result = Interface.GetComponent().Start(); + e.Result = Instance.DreamDaemon.Start(); } catch (Exception ex) { @@ -252,7 +252,7 @@ namespace TGS.ControlPanel var DialogResult = MessageBox.Show("This will immediately shut down the server. Continue?", "Confim", MessageBoxButtons.YesNo); if (DialogResult == DialogResult.No) return; - var res = Interface.GetComponent().Stop(); + var res = Instance.DreamDaemon.Stop(); if (res != null) MessageBox.Show(res); } @@ -262,7 +262,7 @@ namespace TGS.ControlPanel var DialogResult = MessageBox.Show("This will immediately restart the server. Continue?", "Confim", MessageBoxButtons.YesNo); if (DialogResult == DialogResult.No) return; - var res = Interface.GetComponent().Restart(); + var res = Instance.DreamDaemon.Restart(); if (res != null) MessageBox.Show(res); } @@ -274,7 +274,7 @@ namespace TGS.ControlPanel var DialogResult = MessageBox.Show("This will shut down the server when the current round ends. Continue?", "Confim", MessageBoxButtons.YesNo); if (DialogResult == DialogResult.No) return; - Interface.GetComponent().RequestStop(); + Instance.DreamDaemon.RequestStop(); LoadServerPage(); } @@ -283,7 +283,7 @@ namespace TGS.ControlPanel var DialogResult = MessageBox.Show("This will restart the server when the current round ends. Continue?", "Confim", MessageBoxButtons.YesNo); if (DialogResult == DialogResult.No) return; - Interface.GetComponent().RequestRestart(); + Instance.DreamDaemon.RequestRestart(); } /// @@ -293,7 +293,7 @@ namespace TGS.ControlPanel /// The void TestMergeManagerButton_Click(object sender, System.EventArgs e) { - using (var TMM = new TestMergeManager(Interface, ghclient)) + using (var TMM = new TestMergeManager(Instance, ghclient)) TMM.ShowDialog(); LoadServerPage(); } @@ -320,7 +320,7 @@ namespace TGS.ControlPanel try { string res = null; - var repo = Interface.GetComponent(); + var repo = Instance.Repository; var pulls = await Task.Run(() => repo.MergedPullRequests(out res)); if (pulls == null) @@ -364,7 +364,7 @@ namespace TGS.ControlPanel pulls.RemoveAll(x => x.Number == I.Result.Number); var mergeResults = await Task.Run(() => repo.MergePullRequests(pulls, true)); - var compileStartResult = await Task.Run(() => Interface.GetComponent().Compile(true)); + var compileStartResult = await Task.Run(() => Instance.Compiler.Compile(true)); //Show any errors for (var I = 0; I < mergeResults.Count(); ++I) @@ -410,7 +410,7 @@ namespace TGS.ControlPanel Enabled = false; try { - var repo = Interface.GetComponent(); + var repo = Instance.Repository; var res = await Task.Run(() => repo.Reset(true)); @@ -425,7 +425,7 @@ namespace TGS.ControlPanel if (res != null) MessageBox.Show(res, "Error generating changelog"); - await Task.Run(() => Interface.GetComponent().Compile(false)); + await Task.Run(() => Instance.Compiler.Compile(false)); if (res != null) MessageBox.Show(res, "Error starting compile!"); } @@ -452,7 +452,7 @@ namespace TGS.ControlPanel private void SecuritySelector_SelectedIndexChanged(object sender, EventArgs e) { if (!updatingFields) - if (!Interface.GetComponent().SetSecurityLevel((DreamDaemonSecurity)SecuritySelector.SelectedIndex)) + if (!Instance.DreamDaemon.SetSecurityLevel((DreamDaemonSecurity)SecuritySelector.SelectedIndex)) MessageBox.Show("Security change will be applied after next server reboot."); } @@ -461,7 +461,7 @@ namespace TGS.ControlPanel var msg = WorldAnnounceField.Text; if (!String.IsNullOrWhiteSpace(msg)) { - var res = Interface.GetComponent().WorldAnnounce(msg); + var res = Instance.DreamDaemon.WorldAnnounce(msg); if (res != null) { MessageBox.Show(res); @@ -474,13 +474,13 @@ namespace TGS.ControlPanel private void WebclientCheckBox_CheckedChanged(object sender, EventArgs e) { if (!updatingFields) - Interface.GetComponent().SetWebclient(WebclientCheckBox.Checked); + Instance.DreamDaemon.SetWebclient(WebclientCheckBox.Checked); } private void AutoUpdateInterval_ValueChanged(object sender, EventArgs e) { if (!updatingFields) - Interface.GetComponent().SetAutoUpdateInterval((ulong)AutoUpdateInterval.Value); + Instance.Repository.SetAutoUpdateInterval((ulong)AutoUpdateInterval.Value); } private void AutoUpdateCheckbox_CheckedChanged(object sender, EventArgs e) @@ -491,9 +491,9 @@ namespace TGS.ControlPanel AutoUpdateInterval.Visible = on; AutoUpdateMLabel.Visible = on; if (!on) - Interface.GetComponent().SetAutoUpdateInterval(0); + Instance.Repository.SetAutoUpdateInterval(0); else - Interface.GetComponent().SetAutoUpdateInterval((ulong)AutoUpdateInterval.Value); + Instance.Repository.SetAutoUpdateInterval((ulong)AutoUpdateInterval.Value); } } } diff --git a/TGS.ControlPanel/ControlPanel/StaticPage.cs b/TGS.ControlPanel/ControlPanel/StaticPage.cs index 0d53e7b680..76ad9b6943 100644 --- a/TGS.ControlPanel/ControlPanel/StaticPage.cs +++ b/TGS.ControlPanel/ControlPanel/StaticPage.cs @@ -29,7 +29,7 @@ namespace TGS.ControlPanel { if (initializedStaticPage) return; - if(!Interface.ConnectToInstance().HasFlag(ConnectivityLevel.Administrator)) + if(Instance.Administration != null) RecreateStaticButton.Visible = false; BuildFileList(); initializedStaticPage = true; @@ -41,7 +41,7 @@ namespace TGS.ControlPanel IndexesToPaths.Clear(); StaticFileListBox.Items.Clear(); IndexesToPaths.Add(StaticFileListBox.Items.Add("/"), "/"); - if (EnumeratePath("", Interface.GetComponent(), 1) == EnumResult.Unauthorized) + if (EnumeratePath("", Instance.Config, 1) == EnumResult.Unauthorized) { StaticFileListBox.Items[0] += " (UNAUTHORIZED)"; IndexesToPaths[0] = null; @@ -147,7 +147,7 @@ namespace TGS.ControlPanel if (error == null) try { - error = Interface.GetComponent().WriteText(FileName, fileContents, out bool unauthorized); + error = Instance.Config.WriteText(FileName, fileContents, out bool unauthorized); } catch (Exception ex) { @@ -171,7 +171,7 @@ namespace TGS.ControlPanel string text, error; try { - text = Interface.GetComponent().ReadText(remotePath, false, out error, out bool unauthorized); + text = Instance.Config.ReadText(remotePath, false, out error, out bool unauthorized); } catch (Exception ex) { @@ -213,7 +213,7 @@ namespace TGS.ControlPanel { if (MessageBox.Show("Are you sure you want to delete " + ((string)StaticFileListBox.SelectedItem).Trim() + "?", "Confirm", MessageBoxButtons.YesNo) != DialogResult.Yes) return; - var res = Interface.GetComponent().DeleteFile(IndexesToPaths[StaticFileListBox.SelectedIndex], out bool unauthorized); + var res = Instance.Config.DeleteFile(IndexesToPaths[StaticFileListBox.SelectedIndex], out bool unauthorized); if (res != null) MessageBox.Show(res); BuildFileList(); @@ -236,7 +236,7 @@ namespace TGS.ControlPanel var FullFileName = Path.Combine(IndexesToPaths[StaticFileListBox.SelectedIndex], FileName); if (resu == DialogResult.Yes) FullFileName = Path.Combine(FullFileName, "__TGS3_CP_DIRECTORY_CREATOR__"); - var config = Interface.GetComponent(); + var config = Instance.Config; var res = config.WriteText(FullFileName, "", out bool unauthorized); if (res != null) MessageBox.Show(res); @@ -255,7 +255,7 @@ namespace TGS.ControlPanel bool unauthorized; try { - res = Interface.GetComponent().WriteText(IndexesToPaths[index], StaticFileEditTextbox.Text, out unauthorized); + res = Instance.Config.WriteText(IndexesToPaths[index], StaticFileEditTextbox.Text, out unauthorized); } catch (Exception ex) { @@ -307,7 +307,7 @@ namespace TGS.ControlPanel bool unauthorized; try { - entry = Interface.GetComponent().ReadText(path, false, out error, out unauthorized); + entry = Instance.Config.ReadText(path, false, out error, out unauthorized); } catch(Exception e) { @@ -344,7 +344,7 @@ namespace TGS.ControlPanel RecreateStaticButton.Visible = false; return; } - var res = Interface.GetComponent().RecreateStaticFolder(); + var res = Instance.Administration.RecreateStaticFolder(); if (res != null) MessageBox.Show(res); BuildFileList(); diff --git a/TGS.ControlPanel/InstanceSelector.Designer.cs b/TGS.ControlPanel/InstanceSelector.Designer.cs index 87ce1038b7..f9a745d34e 100644 --- a/TGS.ControlPanel/InstanceSelector.Designer.cs +++ b/TGS.ControlPanel/InstanceSelector.Designer.cs @@ -15,7 +15,6 @@ { if (disposing && (components != null)) { - Cleanup(); components.Dispose(); } base.Dispose(disposing); diff --git a/TGS.ControlPanel/InstanceSelector.cs b/TGS.ControlPanel/InstanceSelector.cs index 066fb9c6a9..6794995db2 100644 --- a/TGS.ControlPanel/InstanceSelector.cs +++ b/TGS.ControlPanel/InstanceSelector.cs @@ -3,23 +3,18 @@ using System.Collections.Generic; using System.Threading.Tasks; using System.Windows.Forms; using TGS.Interface; -using TGS.Interface.Components; namespace TGS.ControlPanel { /// - /// Form used for managing manipulation functions + /// Form used for managing s /// sealed partial class InstanceSelector : CountedForm { /// - /// The we build instance connections from + /// The we build instance connections from /// - readonly IServerInterface masterInterface; - /// - /// List of from - /// - IList InstanceData; + readonly IServer server; /// /// Used for modifying without invoking its side effects /// @@ -28,17 +23,17 @@ namespace TGS.ControlPanel /// /// Construct an /// - /// An connected a the - public InstanceSelector(IServerInterface I) + /// The value of + public InstanceSelector(IServer _server) { InitializeComponent(); InstanceListBox.MouseDoubleClick += InstanceListBox_MouseDoubleClick; - masterInterface = I; + server = _server; RefreshInstances(); } /// - /// Connects to a if it is double clicked in + /// Connects to a if it is double clicked in /// /// The sender of the event /// The @@ -53,36 +48,25 @@ namespace TGS.ControlPanel /// The associated with 's current selected index if it exists, otherwise InstanceMetadata GetSelectedInstanceMetadata() { - var index = InstanceListBox.SelectedIndex; - return index != ListBox.NoMatches ? InstanceData[index] : null; + var index = (IInstance)InstanceListBox.SelectedItem; + return index?.Metadata; } /// - /// Called by + /// Loads the using /// - void Cleanup() - { - masterInterface.Dispose(); - } - - /// - /// Loads the using - /// - async void RefreshInstances() + void RefreshInstances() { InstanceListBox.Items.Clear(); - await WrapServerOp(() => { - InstanceData = masterInterface.GetServiceComponent().ListInstances(); - }); - foreach(var I in InstanceData) - InstanceListBox.Items.Add(String.Format("{0}: {1} - {2} - {3}", I.LoggingID, I.Name, I.Path, I.Enabled ? "ONLINE" : "OFFLINE")); - var HasServerAdmin = masterInterface.ConnectionStatus().HasFlag(ConnectivityLevel.Administrator); + foreach(var I in server.Instances) + InstanceListBox.Items.Add(I); + var HasServerAdmin = server.InstanceManager != null; CreateInstanceButton.Enabled = HasServerAdmin; ImportInstanceButton.Enabled = HasServerAdmin; RenameInstanceButton.Enabled = HasServerAdmin; DetachInstanceButton.Enabled = HasServerAdmin; EnabledCheckBox.Enabled = HasServerAdmin; - if(InstanceData.Count > 0) + if(InstanceListBox.Items.Count > 0) InstanceListBox.SelectedIndex = 0; } @@ -90,40 +74,22 @@ namespace TGS.ControlPanel /// Tries to start a for a given /// /// The of to connect to - async void TryConnectToIndexInstance(int index) + void TryConnectToIndexInstance(int index) { if (index == ListBox.NoMatches) return; - var instanceName = InstanceData[index].Name; - if (ControlPanel.InstancesInUse.TryGetValue(instanceName, out ControlPanel activeCP)) + var instance = (IInstance)InstanceListBox.Items[index]; + if (ControlPanel.InstancesInUse.TryGetValue(instance.Metadata.Name, out ControlPanel activeCP)) { activeCP.BringToFront(); return; } - var InstanceAccessor = masterInterface.IsRemoteConnection ? new ServerInterface(masterInterface.LoginInfo) : new ServerInterface(); - try - { - ConnectivityLevel res = ConnectivityLevel.None; - await WrapServerOp(() => { res = InstanceAccessor.ConnectToInstance(instanceName); }); - if (!res.HasFlag(ConnectivityLevel.Connected)) - { - MessageBox.Show("Unable to connect to instance! Does it exist?"); - RefreshInstances(); - } - else if (!res.HasFlag(ConnectivityLevel.Authenticated)) - MessageBox.Show("The current user is not authorized to access this instance!"); - else - new ControlPanel(InstanceAccessor).Show(); - } - catch - { - InstanceAccessor.Dispose(); - throw; - } + + new ControlPanel(server, instance).Show(); } /// - /// Prompts the user for parameters to + /// Prompts the user for parameters to /// /// The sender of the event /// The @@ -135,7 +101,7 @@ namespace TGS.ControlPanel if (MessageBox.Show(String.Format("This will dissociate the server instance at \"{0}\"! Are you sure?", imd.Path), "Instance Detach", MessageBoxButtons.YesNo) != DialogResult.Yes) return; string res = null; - await WrapServerOp(() => res = masterInterface.GetServiceComponent().DetachInstance(imd.Name)); + await WrapServerOp(() => res = server.InstanceManager.DetachInstance(imd.Name)); if (res != null) MessageBox.Show(res); RefreshInstances(); @@ -152,7 +118,7 @@ namespace TGS.ControlPanel } /// - /// Prompts the user for parameters to + /// Prompts the user for parameters to /// /// The sender of the event /// The @@ -167,14 +133,14 @@ namespace TGS.ControlPanel if (imd.Enabled && MessageBox.Show(String.Format("This will temporarily offline the server instance! Are you sure?", imd.Path), "Instance Restart", MessageBoxButtons.YesNo) != DialogResult.Yes) return; string res = null; - await WrapServerOp(() => res = masterInterface.GetServiceComponent().RenameInstance(imd.Name, new_name)); + await WrapServerOp(() => res = server.InstanceManager.RenameInstance(imd.Name, new_name)); if (res != null) MessageBox.Show(res); RefreshInstances(); } /// - /// Prompts the user for parameters to + /// Prompts the user for parameters to /// /// The sender of the event /// The @@ -184,14 +150,14 @@ namespace TGS.ControlPanel if (instance_path == null) return; string res = null; - await WrapServerOp(() => res = masterInterface.GetServiceComponent().ImportInstance(instance_path)); + await WrapServerOp(() => res = server.InstanceManager.ImportInstance(instance_path)); if (res != null) MessageBox.Show(res); RefreshInstances(); } /// - /// Prompts the user for parameters to + /// Prompts the user for parameters to /// /// The sender of the event /// The @@ -204,14 +170,14 @@ namespace TGS.ControlPanel if (instance_path == null) return; string res = null; - await WrapServerOp(() => res = masterInterface.GetServiceComponent().CreateInstance(instance_name, instance_path)); + await WrapServerOp(() => res = server.InstanceManager.CreateInstance(instance_name, instance_path)); if (res != null) MessageBox.Show(res); RefreshInstances(); } /// - /// Attempts to connect the user to an based on the of + /// Attempts to connect the user to an based on the of /// /// The sender of the event /// The @@ -221,7 +187,7 @@ namespace TGS.ControlPanel } /// - /// Prompts the user if they want to call to either online or offline an based on its current state + /// Prompts the user if they want to call to either online or offline an based on its current state /// /// The sender of the event /// The @@ -235,8 +201,7 @@ namespace TGS.ControlPanel if (MessageBox.Show(String.Format("Are you sure you want to {0} this instance?", enabling ? "online" : "offline"), "Instance Status Change", MessageBoxButtons.YesNo) != DialogResult.Yes) return; string res = null; - var index = InstanceListBox.SelectedIndex; - await WrapServerOp(() => res = masterInterface.GetServiceComponent().SetInstanceEnabled(InstanceData[index].Name, enabling)); + await WrapServerOp(() => res = server.InstanceManager.SetInstanceEnabled(GetSelectedInstanceMetadata().Name, enabling)); if (res != null) MessageBox.Show(res); } @@ -247,17 +212,16 @@ namespace TGS.ControlPanel } /// - /// Update based on the selected 's property + /// Update based on the selected 's property /// /// The sender of the event /// The void InstanceListBox_SelectedIndexChanged(object sender, EventArgs e) { - var index = InstanceListBox.SelectedIndex; - if (index != ListBox.NoMatches) + if (InstanceListBox.SelectedIndex != ListBox.NoMatches) { UpdatingEnabledCheckbox = true; - EnabledCheckBox.Checked = InstanceData[index].Enabled; + EnabledCheckBox.Checked = GetSelectedInstanceMetadata().Enabled; UpdatingEnabledCheckbox = false; } } diff --git a/TGS.ControlPanel/Login.cs b/TGS.ControlPanel/Login.cs index 1a1328cbda..f4c44e9523 100644 --- a/TGS.ControlPanel/Login.cs +++ b/TGS.ControlPanel/Login.cs @@ -5,7 +5,7 @@ using TGS.Interface; namespace TGS.ControlPanel { - sealed partial class Login : CountedForm + sealed partial class Login : Form { /// /// Currently selected saved @@ -92,24 +92,22 @@ namespace TGS.ControlPanel loginInfo.Password = PasswordTextBox.Text; } - using (var I = new ServerInterface(loginInfo)) + var I = new ServerInterface(loginInfo); + var Config = Properties.Settings.Default; + //This needs to be read here because V&C Closing us will corrupt the data + var savePassword = SavePasswordCheckBox.Checked; + if (VerifyAndConnect(I)) { - var Config = Properties.Settings.Default; - //This needs to be read here because V&C Closing us will corrupt the data - var savePassword = SavePasswordCheckBox.Checked; - if (VerifyAndConnect(I)) - { - Config.RemoteDefault = true; + Config.RemoteDefault = true; - if (!savePassword) - loginInfo.Password = null; - - Config.RemoteLoginInfo = new StringCollection { loginInfo.ToJSON() }; - - foreach (RemoteLoginInfo info in IPComboBox.Items) - if (!info.Equals(loginInfo)) - Config.RemoteLoginInfo.Add(info.ToJSON()); - } + if (!savePassword) + loginInfo.Password = null; + + Config.RemoteLoginInfo = new StringCollection { loginInfo.ToJSON() }; + + foreach (RemoteLoginInfo info in IPComboBox.Items) + if (!info.Equals(loginInfo)) + Config.RemoteLoginInfo.Add(info.ToJSON()); } } @@ -143,8 +141,8 @@ namespace TGS.ControlPanel if (I.VersionMismatch(out error) && MessageBox.Show(error, "Warning", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return true; - new InstanceSelector(I).Show(); Close(); + Program.ServerInterface = I; return true; } catch diff --git a/TGS.ControlPanel/Program.cs b/TGS.ControlPanel/Program.cs index b72f48eb78..c0472c87c4 100644 --- a/TGS.ControlPanel/Program.cs +++ b/TGS.ControlPanel/Program.cs @@ -7,6 +7,7 @@ namespace TGS.ControlPanel { static class Program { + public static IServerInterface ServerInterface; [STAThread] static void Main(string[] args) { @@ -20,13 +21,18 @@ namespace TGS.ControlPanel } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - ServerInterface.SetBadCertificateHandler(BadCertificateHandler); - var login = new Login(); - login.Show(); - Application.Run(); + Interface.ServerInterface.SetBadCertificateHandler(BadCertificateHandler); + Application.Run(new Login()); + if(ServerInterface != null) + { + new InstanceSelector(ServerInterface.Server).Show(); + Application.Run(); + } } catch (Exception e) { + if (ServerInterface != null) + ServerInterface.Dispose(); ServiceDisconnectException(e); } finally diff --git a/TGS.ControlPanel/TestMergeManager.cs b/TGS.ControlPanel/TestMergeManager.cs index a7bcb7d6f5..6df18e1793 100644 --- a/TGS.ControlPanel/TestMergeManager.cs +++ b/TGS.ControlPanel/TestMergeManager.cs @@ -17,9 +17,9 @@ namespace TGS.ControlPanel const string MergedPullsError = "Error retrieving currently merged pull requests: {0}"; /// - /// The connected to an to handle the pull requests for + /// The to handle pull requests for /// - readonly IServerInterface currentInterface; + readonly IInstance currentInterface; /// /// The to use to read PR lists @@ -38,9 +38,9 @@ namespace TGS.ControlPanel /// /// Construct a /// - /// The to use for managing the + /// The to manage pull requests for /// The to use for getting pull request information - public TestMergeManager(IServerInterface interfaceToUse, GitHubClient clientToUse) + public TestMergeManager(IInstance interfaceToUse, GitHubClient clientToUse) { InitializeComponent(); DialogResult = DialogResult.Cancel; @@ -88,7 +88,7 @@ namespace TGS.ControlPanel { PullRequestListBox.Items.Clear(); - var repo = currentInterface.GetComponent(); + var repo = currentInterface.Repository; string error = null; List pulls = null; @@ -197,7 +197,7 @@ namespace TGS.ControlPanel void PullRequestManager_Load(object sender, EventArgs e) { Enabled = false; - var repo = currentInterface.GetComponent(); + var repo = currentInterface.Repository; if(!Program.GetRepositoryRemote(repo, out repoOwner, out repoName)) { Close(); @@ -256,7 +256,7 @@ namespace TGS.ControlPanel } } - var repo = currentInterface.GetComponent(); + var repo = currentInterface.Repository; string error = null; //Do standard repo updates @@ -297,7 +297,7 @@ namespace TGS.ControlPanel GenerateChangelog(repo); //Start the compile - var compileStarted = await Task.Run(() => currentInterface.GetComponent().Compile(pulls.Count == 1)); + var compileStarted = await Task.Run(() => currentInterface.Compiler.Compile(pulls.Count == 1)); if (error != null) MessageBox.Show(String.Format("Error sychronizing repo: {0}", error)); @@ -341,7 +341,7 @@ namespace TGS.ControlPanel { IList pulls = null; string error = null; - var mergedPullsTask = WrapServerOp(() => pulls = currentInterface.GetComponent().MergedPullRequests(out error)); + var mergedPullsTask = WrapServerOp(() => pulls = currentInterface.Repository.MergedPullRequests(out error)); int PRNumber; try