From 1f71144611ff2d81c10687e9f7ed954bd6d88295 Mon Sep 17 00:00:00 2001 From: js6pak Date: Mon, 12 Oct 2020 23:15:09 +0200 Subject: [PATCH] Add cli client --- .github/workflows/main.yml | 2 +- .../Impostor.Client.Cli.csproj | 17 +++++ .../Impostor.Client.Cli/Program.cs | 70 ++++++++++++++++++ .../AmongUsModifier.cs | 62 +++++++++++----- .../Configuration.cs | 6 +- .../Events/ErrorEventArgs.cs | 4 +- .../Events/SavedEventArgs.cs | 4 +- .../Impostor.Client.Shared.csproj | 12 +++ .../{ => Impostor.Client.WinForms}/App.config | 5 +- .../Forms/FrmMain.Designer.cs | 2 +- .../Forms/FrmMain.cs | 10 +-- .../Forms/FrmMain.resx | 0 .../Impostor.Client.WinForms.csproj} | 8 +- .../{ => Impostor.Client.WinForms}/Program.cs | 4 +- .../Properties/Resources.Designer.cs | 4 +- .../Properties/Resources.resx | 0 .../Properties/Settings.Designer.cs | 0 .../Properties/Settings.settings | 0 .../{ => Impostor.Client.WinForms}/icon.ico | Bin src/Impostor.Shared/Impostor.Shared.csproj | 6 +- .../Innersloth/GameCodeParser.cs | 6 +- src/Impostor.Shared/Innersloth/RegionInfo.cs | 10 +-- src/Impostor.sln | 44 ++++++++--- 23 files changed, 213 insertions(+), 63 deletions(-) create mode 100644 src/Impostor.Client/Impostor.Client.Cli/Impostor.Client.Cli.csproj create mode 100644 src/Impostor.Client/Impostor.Client.Cli/Program.cs rename src/Impostor.Client/{Core => Impostor.Client.Shared}/AmongUsModifier.cs (81%) rename src/Impostor.Client/{Core => Impostor.Client.Shared}/Configuration.cs (96%) rename src/Impostor.Client/{Core => Impostor.Client.Shared}/Events/ErrorEventArgs.cs (81%) rename src/Impostor.Client/{Core => Impostor.Client.Shared}/Events/SavedEventArgs.cs (85%) create mode 100644 src/Impostor.Client/Impostor.Client.Shared/Impostor.Client.Shared.csproj rename src/Impostor.Client/{ => Impostor.Client.WinForms}/App.config (59%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/Forms/FrmMain.Designer.cs (99%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/Forms/FrmMain.cs (92%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/Forms/FrmMain.resx (100%) rename src/Impostor.Client/{Impostor.Client.csproj => Impostor.Client.WinForms/Impostor.Client.WinForms.csproj} (78%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/Program.cs (81%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/Properties/Resources.Designer.cs (96%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/Properties/Resources.resx (100%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/Properties/Settings.Designer.cs (100%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/Properties/Settings.settings (100%) rename src/Impostor.Client/{ => Impostor.Client.WinForms}/icon.ico (100%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e19b915..08ad6d6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,7 +32,7 @@ jobs: - name: Install dependencies run: dotnet restore ./src - name: Build Impostor.Client - run: msbuild ./src/Impostor.Client/Impostor.Client.csproj /p:Configuration=Release + run: msbuild ./src/Impostor.Client/Impostor.Client.WinForms/Impostor.Client.WinForms.csproj /p:Configuration=Release build-server: name: Build Server runs-on: windows-latest diff --git a/src/Impostor.Client/Impostor.Client.Cli/Impostor.Client.Cli.csproj b/src/Impostor.Client/Impostor.Client.Cli/Impostor.Client.Cli.csproj new file mode 100644 index 0000000..2f1b7a5 --- /dev/null +++ b/src/Impostor.Client/Impostor.Client.Cli/Impostor.Client.Cli.csproj @@ -0,0 +1,17 @@ + + + + Exe + net5.0 + + + + + + + + + + + + diff --git a/src/Impostor.Client/Impostor.Client.Cli/Program.cs b/src/Impostor.Client/Impostor.Client.Cli/Program.cs new file mode 100644 index 0000000..f07e1ab --- /dev/null +++ b/src/Impostor.Client/Impostor.Client.Cli/Program.cs @@ -0,0 +1,70 @@ +using System; +using System.Threading.Tasks; +using Impostor.Client.Shared; +using Impostor.Client.Shared.Events; + +namespace Impostor.Client.Cli +{ + internal static class Program + { + private static readonly AmongUsModifier _modifier = new AmongUsModifier(); + + /// IP Address of the server, will prompt if not specified + /// Name for server region + private static Task Main(string address = null, string name = AmongUsModifier.DefaultRegionName) + { + _modifier.RegionName = name; + _modifier.Error += ModifierOnError; + _modifier.Saved += ModifierOnSaved; + + Console.WriteLine("Welcome to Impostor"); + + if (_modifier.TryLoadRegionInfo(out var regionInfo)) + { + Console.WriteLine($"Currently selected region: {regionInfo.Name} ({regionInfo.Ping}, {regionInfo.Servers.Count} server(s))"); + } + + if (address != null) + { + return _modifier.SaveIpAsync(address); + } + + return PromptAsync(); + } + + private static void ModifierOnSaved(object sender, SavedEventArgs e) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("The IP Address was saved, please (re)start Among Us."); + Console.ResetColor(); + } + + private static void WriteError(string message) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(message); + Console.ResetColor(); + } + + private static void ModifierOnError(object sender, ErrorEventArgs e) + { + WriteError(e.Message); + } + + private static async Task PromptAsync() + { + Console.WriteLine("Please enter in the IP Address of the server you would like to use for Among Us"); + Console.WriteLine("If you want to stop playing on the server, simply select another region"); + + while (true) + { + Console.Write("> "); + + if (await _modifier.SaveIpAsync(Console.ReadLine())) + { + return; + } + } + } + } +} \ No newline at end of file diff --git a/src/Impostor.Client/Core/AmongUsModifier.cs b/src/Impostor.Client/Impostor.Client.Shared/AmongUsModifier.cs similarity index 81% rename from src/Impostor.Client/Core/AmongUsModifier.cs rename to src/Impostor.Client/Impostor.Client.Shared/AmongUsModifier.cs index 94fb7a9..c94009b 100644 --- a/src/Impostor.Client/Core/AmongUsModifier.cs +++ b/src/Impostor.Client/Impostor.Client.Shared/AmongUsModifier.cs @@ -8,21 +8,23 @@ using System.Runtime.InteropServices; using System.Threading.Tasks; using Gameloop.Vdf; using Gameloop.Vdf.Linq; -using Impostor.Client.Core.Events; +using Impostor.Client.Shared.Events; using Impostor.Shared.Innersloth; -using ErrorEventArgs = Impostor.Client.Core.Events.ErrorEventArgs; +using ErrorEventArgs = Impostor.Client.Shared.Events.ErrorEventArgs; -namespace Impostor.Client.Core +namespace Impostor.Client.Shared { public class AmongUsModifier { private const uint AppId = 945360; - private const string RegionName = "Impostor"; + public const string DefaultRegionName = "Impostor"; public const ushort DefaultPort = 22023; private readonly string _amongUsDir; private readonly string _regionFile; + public string RegionName { get; set; } = DefaultRegionName; + public AmongUsModifier() { var appData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "..", "LocalLow"); @@ -90,7 +92,7 @@ namespace Impostor.Client.Core return null; } - public async Task SaveIp(string input) + public async Task SaveIpAsync(string input) { // Filter out whitespace. input = input.Trim(); @@ -121,7 +123,7 @@ namespace Impostor.Client.Core if (hostAddresses.Length == 0) { OnError("Invalid IP Address entered"); - return; + return false; } // Use first IPv4 result. @@ -130,7 +132,7 @@ namespace Impostor.Client.Core catch (SocketException) { OnError("Failed to resolve hostname."); - return; + return false; } } @@ -138,10 +140,10 @@ namespace Impostor.Client.Core if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6) { OnError("Invalid IP Address entered, only IPv4 is allowed."); - return; + return false; } - WriteIp(ipAddress, port); + return WriteIp(ipAddress, port); } /// @@ -149,7 +151,7 @@ namespace Impostor.Client.Core /// /// The IPv4 address to write. /// - private void WriteIp(IPAddress ipAddress, ushort port) + private bool WriteIp(IPAddress ipAddress, ushort port) { if (ipAddress == null || ipAddress.AddressFamily != AddressFamily.InterNetwork) @@ -160,7 +162,7 @@ namespace Impostor.Client.Core if (!Directory.Exists(_amongUsDir)) { OnError("Among Us directory was not found, is it installed? Try running it once."); - return; + return false; } using (var file = File.Open(_regionFile, FileMode.Create, FileAccess.Write)) @@ -175,16 +177,16 @@ namespace Impostor.Client.Core region.Serialize(writer); OnSaved(ip, port); + return true; } } /// - /// Loads the existing IP Address from the Among Us region file - /// if it was set by Impostor before. + /// Loads the existing region info from the Among Us. /// - public bool TryLoadIp(out string ipAddress) + public bool TryLoadRegionInfo(out RegionInfo regionInfo) { - ipAddress = null; + regionInfo = null; if (!File.Exists(_regionFile)) { @@ -194,12 +196,36 @@ namespace Impostor.Client.Core using (var file = File.Open(_regionFile, FileMode.Open, FileAccess.Read)) using (var reader = new BinaryReader(file)) { - var region = RegionInfo.Deserialize(reader); - if (region.Name == RegionName && region.Servers.Count >= 1) + try { - ipAddress = region.Servers.ElementAt(0).Ip; + regionInfo = RegionInfo.Deserialize(reader); return true; } + catch (Exception exception) + { + OnError("Couldn't parse region info\n" + exception); + return false; + } + } + } + + /// + /// Loads the existing IP Address from the Among Us region file + /// if it was set by Impostor before. + /// + public bool TryLoadIp(out string ipAddress) + { + ipAddress = null; + + if (!TryLoadRegionInfo(out var regionInfo)) + { + return false; + } + + if ((regionInfo.Name == RegionName || regionInfo.Name == DefaultRegionName) && regionInfo.Servers.Count >= 1) + { + ipAddress = regionInfo.Servers.ElementAt(0).Ip; + return true; } return false; diff --git a/src/Impostor.Client/Core/Configuration.cs b/src/Impostor.Client/Impostor.Client.Shared/Configuration.cs similarity index 96% rename from src/Impostor.Client/Core/Configuration.cs rename to src/Impostor.Client/Impostor.Client.Shared/Configuration.cs index 63b7ab5..f19f741 100644 --- a/src/Impostor.Client/Core/Configuration.cs +++ b/src/Impostor.Client/Impostor.Client.Shared/Configuration.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.IO; -namespace Impostor.Client.Core +namespace Impostor.Client.Shared { - internal class Configuration + public class Configuration { private const string FileRecentIps = @"recent_ips.txt"; private const int MaxRecentIps = 5; @@ -62,4 +62,4 @@ namespace Impostor.Client.Core } } } -} +} \ No newline at end of file diff --git a/src/Impostor.Client/Core/Events/ErrorEventArgs.cs b/src/Impostor.Client/Impostor.Client.Shared/Events/ErrorEventArgs.cs similarity index 81% rename from src/Impostor.Client/Core/Events/ErrorEventArgs.cs rename to src/Impostor.Client/Impostor.Client.Shared/Events/ErrorEventArgs.cs index 939a364..128570d 100644 --- a/src/Impostor.Client/Core/Events/ErrorEventArgs.cs +++ b/src/Impostor.Client/Impostor.Client.Shared/Events/ErrorEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Impostor.Client.Core.Events +namespace Impostor.Client.Shared.Events { public class ErrorEventArgs : EventArgs { @@ -8,7 +8,7 @@ namespace Impostor.Client.Core.Events { Message = message; } - + public string Message { get; } } } \ No newline at end of file diff --git a/src/Impostor.Client/Core/Events/SavedEventArgs.cs b/src/Impostor.Client/Impostor.Client.Shared/Events/SavedEventArgs.cs similarity index 85% rename from src/Impostor.Client/Core/Events/SavedEventArgs.cs rename to src/Impostor.Client/Impostor.Client.Shared/Events/SavedEventArgs.cs index 84cba06..01fae13 100644 --- a/src/Impostor.Client/Core/Events/SavedEventArgs.cs +++ b/src/Impostor.Client/Impostor.Client.Shared/Events/SavedEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Impostor.Client.Core.Events +namespace Impostor.Client.Shared.Events { public class SavedEventArgs : EventArgs { @@ -9,7 +9,7 @@ namespace Impostor.Client.Core.Events IpAddress = ipAddress; Port = port; } - + public string IpAddress { get; } public ushort Port { get; } } diff --git a/src/Impostor.Client/Impostor.Client.Shared/Impostor.Client.Shared.csproj b/src/Impostor.Client/Impostor.Client.Shared/Impostor.Client.Shared.csproj new file mode 100644 index 0000000..b69a98d --- /dev/null +++ b/src/Impostor.Client/Impostor.Client.Shared/Impostor.Client.Shared.csproj @@ -0,0 +1,12 @@ + + + + netstandard2.0;netstandard2.1 + + + + + + + + diff --git a/src/Impostor.Client/App.config b/src/Impostor.Client/Impostor.Client.WinForms/App.config similarity index 59% rename from src/Impostor.Client/App.config rename to src/Impostor.Client/Impostor.Client.WinForms/App.config index 88fa402..2a83c36 100644 --- a/src/Impostor.Client/App.config +++ b/src/Impostor.Client/Impostor.Client.WinForms/App.config @@ -1,6 +1,7 @@ - + + - + \ No newline at end of file diff --git a/src/Impostor.Client/Forms/FrmMain.Designer.cs b/src/Impostor.Client/Impostor.Client.WinForms/Forms/FrmMain.Designer.cs similarity index 99% rename from src/Impostor.Client/Forms/FrmMain.Designer.cs rename to src/Impostor.Client/Impostor.Client.WinForms/Forms/FrmMain.Designer.cs index 3baba9d..70e3837 100644 --- a/src/Impostor.Client/Forms/FrmMain.Designer.cs +++ b/src/Impostor.Client/Impostor.Client.WinForms/Forms/FrmMain.Designer.cs @@ -1,4 +1,4 @@ -namespace Impostor.Client.Forms +namespace Impostor.Client.WinForms.Forms { partial class FrmMain { diff --git a/src/Impostor.Client/Forms/FrmMain.cs b/src/Impostor.Client/Impostor.Client.WinForms/Forms/FrmMain.cs similarity index 92% rename from src/Impostor.Client/Forms/FrmMain.cs rename to src/Impostor.Client/Impostor.Client.WinForms/Forms/FrmMain.cs index c019480..71c3a7d 100644 --- a/src/Impostor.Client/Forms/FrmMain.cs +++ b/src/Impostor.Client/Impostor.Client.WinForms/Forms/FrmMain.cs @@ -1,12 +1,10 @@ using System; using System.Diagnostics; -using System.Linq; using System.Windows.Forms; -using Impostor.Client.Core; -using Impostor.Client.Core.Events; -using ErrorEventArgs = Impostor.Client.Core.Events.ErrorEventArgs; +using Impostor.Client.Shared; +using Impostor.Client.Shared.Events; -namespace Impostor.Client.Forms +namespace Impostor.Client.WinForms.Forms { public partial class FrmMain : Form { @@ -92,7 +90,7 @@ namespace Impostor.Client.Forms comboIp.Enabled = false; buttonLaunch.Enabled = false; - await _modifier.SaveIp(comboIp.Text); + await _modifier.SaveIpAsync(comboIp.Text); } private void lblUrl_Click(object sender, EventArgs e) diff --git a/src/Impostor.Client/Forms/FrmMain.resx b/src/Impostor.Client/Impostor.Client.WinForms/Forms/FrmMain.resx similarity index 100% rename from src/Impostor.Client/Forms/FrmMain.resx rename to src/Impostor.Client/Impostor.Client.WinForms/Forms/FrmMain.resx diff --git a/src/Impostor.Client/Impostor.Client.csproj b/src/Impostor.Client/Impostor.Client.WinForms/Impostor.Client.WinForms.csproj similarity index 78% rename from src/Impostor.Client/Impostor.Client.csproj rename to src/Impostor.Client/Impostor.Client.WinForms/Impostor.Client.WinForms.csproj index 1b56afb..4528d6b 100644 --- a/src/Impostor.Client/Impostor.Client.csproj +++ b/src/Impostor.Client/Impostor.Client.WinForms/Impostor.Client.WinForms.csproj @@ -1,4 +1,5 @@  + {804CF172-0C87-4423-9688-BD97D549891E} WinExe @@ -18,11 +19,10 @@ - - - - + + + \ No newline at end of file diff --git a/src/Impostor.Client/Program.cs b/src/Impostor.Client/Impostor.Client.WinForms/Program.cs similarity index 81% rename from src/Impostor.Client/Program.cs rename to src/Impostor.Client/Impostor.Client.WinForms/Program.cs index 647044b..6fc458a 100644 --- a/src/Impostor.Client/Program.cs +++ b/src/Impostor.Client/Impostor.Client.WinForms/Program.cs @@ -1,8 +1,8 @@ using System; using System.Windows.Forms; -using Impostor.Client.Forms; +using Impostor.Client.WinForms.Forms; -namespace Impostor.Client +namespace Impostor.Client.WinForms { internal static class Program { diff --git a/src/Impostor.Client/Properties/Resources.Designer.cs b/src/Impostor.Client/Impostor.Client.WinForms/Properties/Resources.Designer.cs similarity index 96% rename from src/Impostor.Client/Properties/Resources.Designer.cs rename to src/Impostor.Client/Impostor.Client.WinForms/Properties/Resources.Designer.cs index b5a8370..ef33343 100644 --- a/src/Impostor.Client/Properties/Resources.Designer.cs +++ b/src/Impostor.Client/Impostor.Client.WinForms/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Impostor.Client.Properties +namespace Impostor.Client.WinForms.Properties { /// /// A strongly-typed resource class, for looking up localized strings, etc. @@ -45,7 +45,7 @@ namespace Impostor.Client.Properties if ((resourceMan == null)) { global::System.Resources.ResourceManager temp = - new global::System.Resources.ResourceManager("Impostor.Client.Properties.Resources", + new global::System.Resources.ResourceManager("Impostor.Client.WinForms.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } diff --git a/src/Impostor.Client/Properties/Resources.resx b/src/Impostor.Client/Impostor.Client.WinForms/Properties/Resources.resx similarity index 100% rename from src/Impostor.Client/Properties/Resources.resx rename to src/Impostor.Client/Impostor.Client.WinForms/Properties/Resources.resx diff --git a/src/Impostor.Client/Properties/Settings.Designer.cs b/src/Impostor.Client/Impostor.Client.WinForms/Properties/Settings.Designer.cs similarity index 100% rename from src/Impostor.Client/Properties/Settings.Designer.cs rename to src/Impostor.Client/Impostor.Client.WinForms/Properties/Settings.Designer.cs diff --git a/src/Impostor.Client/Properties/Settings.settings b/src/Impostor.Client/Impostor.Client.WinForms/Properties/Settings.settings similarity index 100% rename from src/Impostor.Client/Properties/Settings.settings rename to src/Impostor.Client/Impostor.Client.WinForms/Properties/Settings.settings diff --git a/src/Impostor.Client/icon.ico b/src/Impostor.Client/Impostor.Client.WinForms/icon.ico similarity index 100% rename from src/Impostor.Client/icon.ico rename to src/Impostor.Client/Impostor.Client.WinForms/icon.ico diff --git a/src/Impostor.Shared/Impostor.Shared.csproj b/src/Impostor.Shared/Impostor.Shared.csproj index c6da43c..b63fd9f 100644 --- a/src/Impostor.Shared/Impostor.Shared.csproj +++ b/src/Impostor.Shared/Impostor.Shared.csproj @@ -1,12 +1,12 @@ - net452;net5.0 - None + netstandard2.0;netstandard2.1 + None - + diff --git a/src/Impostor.Shared/Innersloth/GameCodeParser.cs b/src/Impostor.Shared/Innersloth/GameCodeParser.cs index 533ec8a..86af88e 100644 --- a/src/Impostor.Shared/Innersloth/GameCodeParser.cs +++ b/src/Impostor.Shared/Innersloth/GameCodeParser.cs @@ -50,7 +50,7 @@ namespace Impostor.Shared.Innersloth // V1. Span code = stackalloc byte[4]; BinaryPrimitives.WriteInt32LittleEndian(code, input); -#if NET452 +#if NETSTANDARD2_0 return Encoding.UTF8.GetString(code.Slice(0, 4).ToArray()); #else return Encoding.UTF8.GetString(code.Slice(0, 4)); @@ -118,7 +118,7 @@ namespace Impostor.Shared.Innersloth } // Generate random bytes. -#if NET452 +#if NETSTANDARD2_0 var data = new byte[len]; #else Span data = stackalloc byte[len]; @@ -132,7 +132,7 @@ namespace Impostor.Shared.Innersloth dataChar[i] = V2[V2Map[data[i] % 26]]; } -#if NET452 +#if NETSTANDARD2_0 return GameNameToInt(new string(dataChar.ToArray())); #else return GameNameToInt(new string(dataChar)); diff --git a/src/Impostor.Shared/Innersloth/RegionInfo.cs b/src/Impostor.Shared/Innersloth/RegionInfo.cs index 926bd8d..90c6da1 100644 --- a/src/Impostor.Shared/Innersloth/RegionInfo.cs +++ b/src/Impostor.Shared/Innersloth/RegionInfo.cs @@ -11,18 +11,18 @@ namespace Impostor.Shared.Innersloth Ping = ping; Servers = servers; } - + public string Name { get; } public string Ping { get; } public IReadOnlyList Servers { get; } - + public void Serialize(BinaryWriter writer) { writer.Write(0); writer.Write(Name); writer.Write(Ping); writer.Write(Servers.Count); - + foreach (var server in Servers) { server.Serialize(writer); @@ -39,9 +39,9 @@ namespace Impostor.Shared.Innersloth for (var i = 0; i < serverCount; i++) { - servers.Add(ServerInfo.Deserialize(reader)); + servers.Add(ServerInfo.Deserialize(reader)); } - + return new RegionInfo(name, ping, servers); } } diff --git a/src/Impostor.sln b/src/Impostor.sln index ba1a81a..f9c0a01 100644 --- a/src/Impostor.sln +++ b/src/Impostor.sln @@ -3,26 +3,34 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30503.244 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Server", "Impostor.Server\Impostor.Server.csproj", "{1B0390AF-A4F3-4FE4-B093-708B0135C0B3}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Shared", "Impostor.Shared\Impostor.Shared.csproj", "{1D109A96-FADF-41B9-A845-457A7A5C0C5A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Tests", "Impostor.Tests\Impostor.Tests.csproj", "{C1385C67-A7DD-46D2-80F6-FA428B85FB22}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "submodules", "submodules", "{DFA3CC6A-A27C-4713-876D-A55912C78C45}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hazel", "..\submodules\Hazel-Networking\Hazel\Hazel.csproj", "{02CFBD30-D77D-400F-94B2-700F60EFDD7F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Tests", "Impostor.Tests\Impostor.Tests.csproj", "{C1385C67-A7DD-46D2-80F6-FA428B85FB22}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{56DD9707-D811-4056-9E2C-8A9CC2479B07}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Tools.Proxy", "Impostor.Tools.Proxy\Impostor.Tools.Proxy.csproj", "{D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Client", "Impostor.Client\Impostor.Client.csproj", "{804CF172-0C87-4423-9688-BD97D549891E}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "server", "server", "{F2B205ED-4250-412E-9992-B11B7D6CE136}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Server", "Impostor.Server\Impostor.Server.csproj", "{1B0390AF-A4F3-4FE4-B093-708B0135C0B3}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Server.Api", "Impostor.Server.Api\Impostor.Server.Api.csproj", "{E096A7D7-D693-4A13-A526-38CC574D84F8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Server.Hazel", "Impostor.Server.Hazel\Impostor.Server.Hazel.csproj", "{C9E8E1E2-BFE3-41AD-8CB9-82F0F52E2306}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{94FAED42-15BB-40CF-BE64-5D5C3B4ABC8F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Client.Shared", "Impostor.Client\Impostor.Client.Shared\Impostor.Client.Shared.csproj", "{7C3EB599-2292-4532-B280-D5BED1094DD4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Client.WinForms", "Impostor.Client\Impostor.Client.WinForms\Impostor.Client.WinForms.csproj", "{804CF172-0C87-4423-9688-BD97D549891E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Impostor.Client.Cli", "Impostor.Client\Impostor.Client.Cli\Impostor.Client.Cli.csproj", "{82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -72,13 +80,9 @@ Global {D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Release|x86.ActiveCfg = Release|Any CPU {D16B8DE9-8EE2-4F6A-9352-305D5AB0233D}.Release|x86.Build.0 = Release|Any CPU {804CF172-0C87-4423-9688-BD97D549891E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {804CF172-0C87-4423-9688-BD97D549891E}.Debug|Any CPU.Build.0 = Debug|Any CPU {804CF172-0C87-4423-9688-BD97D549891E}.Debug|x86.ActiveCfg = Debug|Any CPU - {804CF172-0C87-4423-9688-BD97D549891E}.Debug|x86.Build.0 = Debug|Any CPU {804CF172-0C87-4423-9688-BD97D549891E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {804CF172-0C87-4423-9688-BD97D549891E}.Release|Any CPU.Build.0 = Release|Any CPU {804CF172-0C87-4423-9688-BD97D549891E}.Release|x86.ActiveCfg = Release|Any CPU - {804CF172-0C87-4423-9688-BD97D549891E}.Release|x86.Build.0 = Release|Any CPU {E096A7D7-D693-4A13-A526-38CC574D84F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E096A7D7-D693-4A13-A526-38CC574D84F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {E096A7D7-D693-4A13-A526-38CC574D84F8}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -95,6 +99,22 @@ Global {C9E8E1E2-BFE3-41AD-8CB9-82F0F52E2306}.Release|Any CPU.Build.0 = Release|Any CPU {C9E8E1E2-BFE3-41AD-8CB9-82F0F52E2306}.Release|x86.ActiveCfg = Release|Any CPU {C9E8E1E2-BFE3-41AD-8CB9-82F0F52E2306}.Release|x86.Build.0 = Release|Any CPU + {7C3EB599-2292-4532-B280-D5BED1094DD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C3EB599-2292-4532-B280-D5BED1094DD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C3EB599-2292-4532-B280-D5BED1094DD4}.Debug|x86.ActiveCfg = Debug|Any CPU + {7C3EB599-2292-4532-B280-D5BED1094DD4}.Debug|x86.Build.0 = Debug|Any CPU + {7C3EB599-2292-4532-B280-D5BED1094DD4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C3EB599-2292-4532-B280-D5BED1094DD4}.Release|Any CPU.Build.0 = Release|Any CPU + {7C3EB599-2292-4532-B280-D5BED1094DD4}.Release|x86.ActiveCfg = Release|Any CPU + {7C3EB599-2292-4532-B280-D5BED1094DD4}.Release|x86.Build.0 = Release|Any CPU + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}.Debug|x86.ActiveCfg = Debug|Any CPU + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}.Debug|x86.Build.0 = Debug|Any CPU + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}.Release|Any CPU.Build.0 = Release|Any CPU + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}.Release|x86.ActiveCfg = Release|Any CPU + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -105,5 +125,11 @@ Global GlobalSection(NestedProjects) = preSolution {02CFBD30-D77D-400F-94B2-700F60EFDD7F} = {DFA3CC6A-A27C-4713-876D-A55912C78C45} {D16B8DE9-8EE2-4F6A-9352-305D5AB0233D} = {56DD9707-D811-4056-9E2C-8A9CC2479B07} + {804CF172-0C87-4423-9688-BD97D549891E} = {94FAED42-15BB-40CF-BE64-5D5C3B4ABC8F} + {1B0390AF-A4F3-4FE4-B093-708B0135C0B3} = {F2B205ED-4250-412E-9992-B11B7D6CE136} + {E096A7D7-D693-4A13-A526-38CC574D84F8} = {F2B205ED-4250-412E-9992-B11B7D6CE136} + {C9E8E1E2-BFE3-41AD-8CB9-82F0F52E2306} = {F2B205ED-4250-412E-9992-B11B7D6CE136} + {7C3EB599-2292-4532-B280-D5BED1094DD4} = {94FAED42-15BB-40CF-BE64-5D5C3B4ABC8F} + {82B36C4C-4EBD-49B7-A2DB-0B3308FBEF69} = {94FAED42-15BB-40CF-BE64-5D5C3B4ABC8F} EndGlobalSection EndGlobal -- 2.39.5