aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-12-17 05:26:44 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-12-17 05:26:44 +0200
commitf32a4fdbaaa4ef966d27c7d2727d81bf65aabb61 (patch)
tree07f4d18cb3033e3bef1309af3f447a2bab63195c
parenta309970822fdc61357db07c32fd67b15d1c497f0 (diff)
downloadTango-f32a4fdbaaa4ef966d27c7d2727d81bf65aabb61.tar.gz
Tango-f32a4fdbaaa4ef966d27c7d2727d81bf65aabb61.zip
StubsUtils
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/App.config6
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Program.cs66
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Properties/AssemblyInfo.cs36
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Tango.StubsUtils.Client.CLI.csproj63
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/packages.config4
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/App.config6
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Program.cs90
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Properties/AssemblyInfo.cs36
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Tango.StubsUtils.PerformanceTest.CLI.csproj63
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.config22
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.xaml92
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.xaml.cs25
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_connected.icobin0 -> 109412 bytes
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_connected.pngbin0 -> 2914 bytes
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_disconnected.icobin0 -> 109141 bytes
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_disconnected.pngbin0 -> 2817 bytes
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_none.pngbin0 -> 3171 bytes
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/MainWindow.xaml15
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/MainWindow.xaml.cs55
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/AssemblyInfo.cs55
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Resources.Designer.cs71
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Resources.resx117
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Settings.Designer.cs30
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Settings.settings7
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Colors.xaml140
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Converters.xaml45
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Fonts.xaml14
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/ServiceUISettings.cs13
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Tango.StubsUtils.Service.UI.csproj183
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/ViewModels/MainViewVM.cs68
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Views/MainView.xaml144
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Views/MainView.xaml.cs30
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/packages.config9
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/Properties/AssemblyInfo.cs36
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubReflection.cs49
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubsService.cs334
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubsServiceSettings.cs19
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/Tango.StubsUtils.Service.csproj89
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/app.config19
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/packages.config6
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/App.config6
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Program.cs79
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Properties/AssemblyInfo.cs36
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Tango.StubsUtils.SessionClient.CLI.csproj59
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/Properties/AssemblyInfo.cs36
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageRequestDTO.cs14
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageResponseDTO.cs20
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageResponseStatus.cs16
-rw-r--r--Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/Tango.StubsUtils.Shared.csproj50
-rw-r--r--Software/Visual_Studio/Tango.sln152
50 files changed, 2519 insertions, 6 deletions
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/App.config b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/App.config
new file mode 100644
index 000000000..731f6de6c
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
+ </startup>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Program.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Program.cs
new file mode 100644
index 000000000..9fd588906
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Program.cs
@@ -0,0 +1,66 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.IO.Pipes;
+using System.Linq;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.StubsUtils.Shared;
+
+namespace Tango.StubsUtils.Client.CLI
+{
+ class Program
+ {
+ private const string PIPE_NAME = "Tango_Stubs_Server";
+
+ static void Main(string[] args)
+ {
+ StubPackageResponseDTO response = null;
+
+ try
+ {
+ var _client = new NamedPipeClientStream(PIPE_NAME);
+ _client.Connect(5000);
+
+ var writer = new StreamWriter(_client);
+
+ var jsonRequest = String.Join(" ", args);
+
+ writer.WriteLine(jsonRequest);
+ writer.Flush();
+
+ var reader = new StreamReader(_client);
+ String responseString = reader.ReadToEnd();
+ response = new StubPackageResponseDTO();
+ response.Status = responseString.StartsWith("Status: OK") ? StubPackageResponseStatus.OK : StubPackageResponseStatus.Error;
+ response.Message = responseString;
+ }
+ catch (Exception ex)
+ {
+ ExitError($"Error communicating with the stubs service. {ex.Message}");
+ }
+
+ if (response.Status == StubPackageResponseStatus.OK)
+ {
+ Console.ForegroundColor = ConsoleColor.Gray;
+ Console.WriteLine(response.Message);
+ Environment.Exit(0);
+ }
+ else
+ {
+ ExitError(response.Message);
+ }
+ }
+
+ private static void ExitError(String error)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.Error.WriteLine($"{error}");
+ Console.ForegroundColor = ConsoleColor.Gray;
+ Environment.Exit(-1);
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..9c1a90a8d
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tango.StubsUtils.Client.CLI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.StubsUtils.Client.CLI")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("2ed5d897-df22-491e-8410-d01383b3dad2")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Tango.StubsUtils.Client.CLI.csproj b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Tango.StubsUtils.Client.CLI.csproj
new file mode 100644
index 000000000..7bbf4b387
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/Tango.StubsUtils.Client.CLI.csproj
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{2ED5D897-DF22-491E-8410-D01383B3DAD2}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>Tango.StubsUtils.Client.CLI</RootNamespace>
+ <AssemblyName>tangostub</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Tango.StubsUtils.Shared\Tango.StubsUtils.Shared.csproj">
+ <Project>{dae96f06-72cd-411d-90a3-9456ae79f699}</Project>
+ <Name>Tango.StubsUtils.Shared</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/packages.config b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/packages.config
new file mode 100644
index 000000000..7ee8c1052
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Client.CLI/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
+</packages> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/App.config b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/App.config
new file mode 100644
index 000000000..731f6de6c
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
+ </startup>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Program.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Program.cs
new file mode 100644
index 000000000..16492a276
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Program.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Tango.StubsUtils.PerformanceTest.CLI
+{
+ class Program
+ {
+ private const int ROUNDS = 10000;
+
+ static void Main(string[] args)
+ {
+ List<double> durations = new List<double>();
+
+ Process process = new Process();
+ process.StartInfo.FileName = "tangostub_s.exe";
+ process.StartInfo.CreateNoWindow = true;
+ process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.RedirectStandardInput = true;
+ process.StartInfo.UseShellExecute = false;
+ process.Start();
+ process.PriorityClass = ProcessPriorityClass.RealTime;
+
+ process.StandardOutput.ReadLine(); //Read the first welcome line...
+
+ Stopwatch watch = new Stopwatch();
+
+ for (int i = 0; i < ROUNDS; i++)
+ {
+ watch.Restart();
+
+ process.StandardInput.WriteLine("calculate 10 15");
+ StringBuilder builder = new StringBuilder();
+
+ char[] buffer = new char[1];
+
+ while (process.StandardOutput.Read(buffer, 0, 1) > 0)
+ {
+ char c = buffer[0];
+
+ if (c == '\r')
+ {
+ process.StandardOutput.Read();
+ break;
+ }
+ else if (c == '>')
+ {
+ process.StandardOutput.Read();
+ }
+ else
+ {
+ builder.Append(buffer[0]);
+ }
+ }
+
+ String response = builder.ToString();
+
+ if (response.StartsWith("Status: Error"))
+ {
+ OnError(response);
+ return;
+ }
+
+ durations.Add(watch.ElapsedMilliseconds);
+
+ Console.SetCursorPosition(0, 0);
+ Console.Write($"Performance test: {i + 1}/{ROUNDS}, Avg: {Math.Round(durations.Average(), 2)} ms ");
+ }
+
+ Console.WriteLine();
+ Console.WriteLine();
+ Console.WriteLine("Completed.");
+ Console.ReadLine();
+ }
+
+ private static void OnError(String error)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine(error);
+ Console.ForegroundColor = ConsoleColor.Gray;
+ Console.ReadLine();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..ff6dc5c94
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tango.StubsUtils.PerformanceTest.CLI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.StubsUtils.PerformanceTest.CLI")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f423324c-7d0a-4512-beba-df3a931a09f6")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Tango.StubsUtils.PerformanceTest.CLI.csproj b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Tango.StubsUtils.PerformanceTest.CLI.csproj
new file mode 100644
index 000000000..f4575043f
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.PerformanceTest.CLI/Tango.StubsUtils.PerformanceTest.CLI.csproj
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{F423324C-7D0A-4512-BEBA-DF3A931A09F6}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>Tango.StubsUtils.PerformanceTest.CLI</RootNamespace>
+ <AssemblyName>Tango.StubsUtils.PerformanceTest.CLI</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Tango.StubsUtils.Client.CLI\Tango.StubsUtils.Client.CLI.csproj">
+ <Project>{2ed5d897-df22-491e-8410-d01383b3dad2}</Project>
+ <Name>Tango.StubsUtils.Client.CLI</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Tango.StubsUtils.SessionClient.CLI\Tango.StubsUtils.SessionClient.CLI.csproj">
+ <Project>{f1b727f5-adf5-4a81-a740-7e64e48b29d4}</Project>
+ <Name>Tango.StubsUtils.SessionClient.CLI</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.config b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.config
new file mode 100644
index 000000000..6544d52a6
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.config
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
+ </startup>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.0.5.0" newVersion="5.0.5.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.xaml b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.xaml
new file mode 100644
index 000000000..4db18888a
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.xaml
@@ -0,0 +1,92 @@
+<Application x:Class="Tango.StubsUtils.Service.UI.App"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:local="clr-namespace:Tango.StubsUtils.Service.UI"
+ StartupUri="MainWindow.xaml">
+ <Application.Resources>
+ <ResourceDictionary>
+ <ResourceDictionary.MergedDictionaries>
+
+ <!--LOADS IN App.xaml.cs-->
+
+ <!--<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/VS/Colors.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/VS/Styles.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />-->
+
+ <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
+ <!-- Accent and AppTheme setting -->
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Red.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/FlatButton.xaml" />
+
+ <!--LOADS IN App.xaml.cs-->
+
+ <materialDesign:BundledTheme BaseTheme="Dark" PrimaryColor="LightBlue" SecondaryColor="Cyan" />
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
+
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/materialdesigncolor.lightblue.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/materialdesigncolor.yellow.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Button.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.CheckBox.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ListBox.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.PopupBox.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.RadioButton.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ToggleButton.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/materialdesigntheme.TextBlock.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/materialdesigntheme.Label.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/materialdesigntheme.Slider.xaml">
+ </ResourceDictionary>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/materialdesigntheme.ProgressBar.xaml"/>
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ComboBox.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Menu.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Slider.xaml" />
+
+ <ResourceDictionary Source="/Resources/Converters.xaml" />
+ <ResourceDictionary Source="/Resources/Colors.xaml" />
+ <ResourceDictionary Source="/Resources/Fonts.xaml" />
+
+ <ResourceDictionary>
+ <!--OVERRIDE MAHAPPS-->
+ <SolidColorBrush x:Key="HighlightBrush" Color="{DynamicResource Primary700}"/>
+ <SolidColorBrush x:Key="AccentBaseColorBrush" Color="{DynamicResource Primary600}" />
+ <SolidColorBrush x:Key="AccentColorBrush" Color="{DynamicResource Primary500}"/>
+ <SolidColorBrush x:Key="AccentColorBrush2" Color="{DynamicResource Primary400}"/>
+ <SolidColorBrush x:Key="AccentColorBrush3" Color="{DynamicResource Primary300}"/>
+ <SolidColorBrush x:Key="AccentColorBrush4" Color="{DynamicResource Primary200}"/>
+ <SolidColorBrush x:Key="WindowTitleColorBrush" Color="{DynamicResource Primary700}"/>
+ <SolidColorBrush x:Key="AccentSelectedColorBrush" Color="{DynamicResource Primary500Foreground}"/>
+ <LinearGradientBrush x:Key="ProgressBrush" EndPoint="0.001,0.5" StartPoint="1.002,0.5">
+ <GradientStop Color="{DynamicResource Primary700}" Offset="0"/>
+ <GradientStop Color="{DynamicResource Primary300}" Offset="1"/>
+ </LinearGradientBrush>
+ <SolidColorBrush x:Key="CheckmarkFill" Color="{DynamicResource Primary500}"/>
+ <SolidColorBrush x:Key="RightArrowFill" Color="{DynamicResource Primary500}"/>
+ <SolidColorBrush x:Key="IdealForegroundColorBrush" Color="{DynamicResource Primary500Foreground}"/>
+ <SolidColorBrush x:Key="IdealForegroundDisabledBrush" Color="{DynamicResource Primary500}" Opacity="0.4"/>
+ <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.OnSwitchBrush.Win10" Color="{DynamicResource Primary500}" />
+ <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.OnSwitchMouseOverBrush.Win10" Color="{DynamicResource Primary400}" />
+ <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.ThumbIndicatorCheckedBrush.Win10" Color="{DynamicResource Primary500Foreground}" />
+ </ResourceDictionary>
+
+ </ResourceDictionary.MergedDictionaries>
+ </ResourceDictionary>
+ </Application.Resources>
+</Application>
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.xaml.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.xaml.cs
new file mode 100644
index 000000000..c6f57aad6
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/App.xaml.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+using Tango.Settings;
+
+namespace Tango.StubsUtils.Service.UI
+{
+ /// <summary>
+ /// Interaction logic for App.xaml
+ /// </summary>
+ public partial class App : Application
+ {
+ protected override void OnStartup(StartupEventArgs e)
+ {
+ base.OnStartup(e);
+
+ ServiceUISettings settings = SettingsManager.Default.GetOrCreate<ServiceUISettings>();
+ settings.Save();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_connected.ico b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_connected.ico
new file mode 100644
index 000000000..75aba4e9b
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_connected.ico
Binary files differ
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_connected.png b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_connected.png
new file mode 100644
index 000000000..47dd7d116
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_connected.png
Binary files differ
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_disconnected.ico b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_disconnected.ico
new file mode 100644
index 000000000..8b5af1ccb
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_disconnected.ico
Binary files differ
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_disconnected.png b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_disconnected.png
new file mode 100644
index 000000000..51876421f
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_disconnected.png
Binary files differ
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_none.png b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_none.png
new file mode 100644
index 000000000..95cf615c5
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Images/machine_icon_none.png
Binary files differ
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/MainWindow.xaml b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/MainWindow.xaml
new file mode 100644
index 000000000..f7113076c
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/MainWindow.xaml
@@ -0,0 +1,15 @@
+<mahapps:MetroWindow x:Class="Tango.StubsUtils.Service.UI.MainWindow"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:local="clr-namespace:Tango.StubsUtils.Service.UI"
+ xmlns:tb="http://www.hardcodet.net/taskbar"
+ xmlns:views="clr-namespace:Tango.StubsUtils.Service.UI.Views"
+ mc:Ignorable="d"
+ Title="Tango - Stubs Service" Height="400" Width="700" EnableDWMDropShadow="True" WindowTitleBrush="{StaticResource FSE_PrimaryBackgroundLightBrush}" BorderBrush="{StaticResource FSE_PrimaryBackgroundLightBrush}" OverrideDefaultWindowCommandsBrush="{StaticResource FSE_PrimaryForegroundBrush}" TitleForeground="{StaticResource FSE_PrimaryForegroundBrush}" TitleCaps="False" BorderThickness="1" WindowStartupLocation="CenterScreen" Background="{StaticResource FSE_PrimaryBackgroundBrush}" Foreground="{StaticResource FSE_PrimaryForegroundBrush}" DataContext="{Binding RelativeSource={RelativeSource Self}}" Visibility="Hidden">
+ <Grid>
+ <views:MainView x:Name="MainView" />
+ </Grid>
+</mahapps:MetroWindow>
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/MainWindow.xaml.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/MainWindow.xaml.cs
new file mode 100644
index 000000000..98a8bd721
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/MainWindow.xaml.cs
@@ -0,0 +1,55 @@
+using MahApps.Metro.Controls;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Tango.StubsUtils.Service.UI.ViewModels;
+
+namespace Tango.StubsUtils.Service.UI
+{
+ /// <summary>
+ /// Interaction logic for MainWindow.xaml
+ /// </summary>
+ public partial class MainWindow : MetroWindow
+ {
+ private MainViewVM _mainViewVM;
+
+ public MainWindow()
+ {
+ InitializeComponent();
+ Loaded += MainWindow_Loaded;
+ StateChanged += MainWindow_StateChanged;
+ Closing += MainWindow_Closing;
+ }
+
+ private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ e.Cancel = true;
+ _mainViewVM.ExitApplication();
+ }
+
+ private void MainWindow_StateChanged(object sender, EventArgs e)
+ {
+ if (WindowState == WindowState.Minimized)
+ {
+ Visibility = Visibility.Hidden;
+ _mainViewVM.IsTrayIconVisible = true;
+ }
+ }
+
+ private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ _mainViewVM = MainView.DataContext as MainViewVM;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..4b32746ed
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tango.StubsUtils.Service.UI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.StubsUtils.Service.UI")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+//In order to begin building localizable applications, set
+//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
+//inside a <PropertyGroup>. For example, if you are using US english
+//in your source files, set the <UICulture> to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Resources.Designer.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..11234f139
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.StubsUtils.Service.UI.Properties
+{
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tango.StubsUtils.Service.UI.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Resources.resx b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Resources.resx
new file mode 100644
index 000000000..af7dbebba
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Settings.Designer.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..d058593f8
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Tango.StubsUtils.Service.UI.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Settings.settings b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Settings.settings
new file mode 100644
index 000000000..033d7a5e9
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Colors.xaml b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Colors.xaml
new file mode 100644
index 000000000..48e13f381
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Colors.xaml
@@ -0,0 +1,140 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="clr-namespace:Tango.StubsUtils.Service.UI.Resources">
+
+ <!--COLORS-->
+ <Color x:Key="FSE_PrimaryBackgroundDarkColor">#202020</Color>
+ <Color x:Key="FSE_PrimaryBackgroundMidColor">#262626</Color>
+ <Color x:Key="FSE_PrimaryBackgroundColor">#303030</Color>
+ <Color x:Key="FSE_PrimaryBackgroundLightColor">#404040</Color>
+ <Color x:Key="FSE_PrimaryBackgroundLighterColor">#505050</Color>
+ <Color x:Key="FSE_PrimaryForegroundColor">#EEEEEE</Color>
+ <Color x:Key="FSE_GrayColor">#A0A0A0</Color>
+ <Color x:Key="FSE_SemiTransparentColor">#76000000</Color>
+ <Color x:Key="FSE_BorderColor">#707070</Color>
+ <Color x:Key="FSE_PrimaryAccentColor">#009FE7</Color>
+ <Color x:Key="FSE_PrimaryAccentDarkColor">#009FE7</Color>
+
+ <Color x:Key="FSE_CriticalColor">#FA2828</Color>
+ <Color x:Key="FSE_ErrorColor">#FF4C4C</Color>
+ <Color x:Key="FSE_WarningColor">#FF914C</Color>
+ <Color x:Key="FSE_SuccessColor">#6DFF72</Color>
+ <Color x:Key="FSE_MessageBoxTitleHeaderBackgroundColor">#404040</Color>
+
+ <Color x:Key="FSE_UsbColor">#FF6F6F</Color>
+ <Color x:Key="FSE_WifiColor">#58C13B</Color>
+ <Color x:Key="FSE_SignalRColor">#6DDAFF</Color>
+ <Color x:Key="FSE_EmulatorColor">#F3FF6D</Color>
+
+ <Color x:Key="FSE_RedColor">#FF6F6F</Color>
+ <Color x:Key="FSE_GreenColor">#8EFF6F</Color>
+ <Color x:Key="FSE_OrangeColor">#FF7C2B</Color>
+ <Color x:Key="FSE_YellowColor">#FFB84B</Color>
+
+ <Color x:Key="FSE_RealTimeGraph_White">#18FFFFFF</Color>
+ <Color x:Key="FSE_RealTimeGraph_Red">#B6FF6F6F</Color>
+ <Color x:Key="FSE_RealTimeGraph_Yellow">#BBFFB84B</Color>
+ <Color x:Key="FSE_RealTimeGraph_Green">#B958C13B</Color>
+ <Color x:Key="FSE_RealTimeGraph_Orange">#BBFA9252</Color>
+
+ <Color x:Key="FSE_RealTimeGraph_ForegroundColor">#7C98B3</Color>
+ <Color x:Key="FSE_RealTimeGraph_OuterBorderColor">#202020</Color>
+ <Color x:Key="FSE_RealTimeGraph_InnerBorderColor">#505050</Color>
+ <Color x:Key="FSE_RealTimeGraph_GridLinesColor">#303030</Color>
+
+ <Color x:Key="FSE_Panel_BorderColor">#202020</Color>
+ <Color x:Key="FSE_Panel_BackgroundColor">#252525</Color>
+
+ <!--BRUSHES-->
+ <SolidColorBrush x:Key="FSE_PrimaryBackgroundDarkBrush" Color="{StaticResource FSE_PrimaryBackgroundDarkColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_PrimaryBackgroundMidBrush" Color="{StaticResource FSE_PrimaryBackgroundMidColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_PrimaryBackgroundBrush" Color="{StaticResource FSE_PrimaryBackgroundColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_PrimaryBackgroundLightBrush" Color="{StaticResource FSE_PrimaryBackgroundLightColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_PrimaryBackgroundLighterBrush" Color="{StaticResource FSE_PrimaryBackgroundLighterColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_PrimaryForegroundBrush" Color="{StaticResource FSE_PrimaryForegroundColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_SemiTransparentBrush" Color="{StaticResource FSE_SemiTransparentColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_BorderBrush" Color="{StaticResource FSE_BorderColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_GrayBrush" Color="{StaticResource FSE_GrayColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_PrimaryAccentBrush" Color="{StaticResource FSE_PrimaryAccentColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_PrimaryAccentDarkBrush" Color="{StaticResource FSE_PrimaryAccentDarkColor}"></SolidColorBrush>
+
+ <SolidColorBrush x:Key="FSE_CriticalBrush" Color="{StaticResource FSE_CriticalColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_ErrorBrush" Color="{StaticResource FSE_ErrorColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_WarningBrush" Color="{StaticResource FSE_WarningColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_SuccessBrush" Color="{StaticResource FSE_SuccessColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_InfoBrush" Color="{StaticResource FSE_PrimaryForegroundColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_MessageBoxTitleHeaderBackgroundBrush" Color="{StaticResource FSE_MessageBoxTitleHeaderBackgroundColor}"></SolidColorBrush>
+
+ <SolidColorBrush x:Key="FSE_UsbBrush" Color="{StaticResource FSE_UsbColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_WifiBrush" Color="{StaticResource FSE_WifiColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_SignalRBrush" Color="{StaticResource FSE_SignalRColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_EmulatorBrush" Color="{StaticResource FSE_EmulatorColor}"></SolidColorBrush>
+
+ <SolidColorBrush x:Key="FSE_RedBrush" Color="{StaticResource FSE_RedColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_GreenBrush" Color="{StaticResource FSE_GreenColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_OrangeBrush" Color="{StaticResource FSE_OrangeColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_YellowBrush" Color="{StaticResource FSE_YellowColor}"></SolidColorBrush>
+
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_ForegroundBrush" Color="{StaticResource FSE_RealTimeGraph_ForegroundColor}" />
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_OuterBorderBrush" Color="{StaticResource FSE_RealTimeGraph_OuterBorderColor}" />
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_InnerBorderBrush" Color="{StaticResource FSE_RealTimeGraph_InnerBorderColor}" />
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_GridLinesBrush" Color="{StaticResource FSE_RealTimeGraph_GridLinesColor}" />
+
+ <LinearGradientBrush x:Key="FSE_RealTimeGraph_BackgroundBrush" EndPoint="0.5,1" StartPoint="0.5,0" >
+ <GradientStop Color="#202020"/>
+ <GradientStop Color="#FF333333" Offset="1"/>
+ </LinearGradientBrush>
+
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_WhiteBrush" Color="{StaticResource FSE_RealTimeGraph_White}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_RedBrush" Color="{StaticResource FSE_RealTimeGraph_Red}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_YellowBrush" Color="{StaticResource FSE_RealTimeGraph_Yellow}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_GreenBrush" Color="{StaticResource FSE_RealTimeGraph_Green}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_RealTimeGraph_OrangeBrush" Color="{StaticResource FSE_RealTimeGraph_Orange}"></SolidColorBrush>
+
+ <SolidColorBrush x:Key="FSE_Panel_BorderBrush" Color="{StaticResource FSE_Panel_BorderColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="FSE_Panel_BackgroundBrush" Color="{StaticResource FSE_Panel_BackgroundColor}"></SolidColorBrush>
+
+ <!--IMAGE BRUSHES-->
+ <ImageBrush x:Key="FSE_AbstractBrush" ImageSource="{StaticResource FSE_Abstract}" Stretch="UniformToFill"></ImageBrush>
+
+ <!--BRUSHES OVERRIDES-->
+ <SolidColorBrush x:Key="MaterialDesignPaper" Color="{StaticResource FSE_PrimaryBackgroundColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="MaterialDesignBody" Color="{StaticResource FSE_PrimaryForegroundColor}"></SolidColorBrush>
+ <SolidColorBrush x:Key="PrimaryHueMidForegroundBrush" Color="{StaticResource FSE_PrimaryForegroundColor}"/>
+ <SolidColorBrush x:Key="PrimaryHueLightBrush" Color="{StaticResource FSE_PrimaryBackgroundLightColor}"/>
+ <SolidColorBrush x:Key="PrimaryHueLightForegroundBrush" Color="{StaticResource FSE_PrimaryForegroundColor}"/>
+ <SolidColorBrush x:Key="PrimaryHueMidBrush" Color="{StaticResource FSE_PrimaryAccentColor}"/>
+
+ <!--MAHAPPS OVERRIED-->
+ <Color x:Key="HighlightColor">#009FE7</Color>
+ <Color x:Key="AccentColor3">#009FE7</Color>
+ <Color x:Key="AccentColor2">#009FE7</Color>
+ <Color x:Key="AccentColor1">#009FE7</Color>
+ <SolidColorBrush x:Key="HighlightBrush" Color="{DynamicResource Primary700}"/>
+ <SolidColorBrush x:Key="AccentBaseColorBrush" Color="{DynamicResource Primary600}" />
+ <SolidColorBrush x:Key="AccentColorBrush" Color="{DynamicResource Primary500}"/>
+ <SolidColorBrush x:Key="AccentColorBrush2" Color="{DynamicResource Primary400}"/>
+ <SolidColorBrush x:Key="AccentColorBrush3" Color="{DynamicResource Primary300}"/>
+ <SolidColorBrush x:Key="AccentColorBrush4" Color="{DynamicResource Primary200}"/>
+ <SolidColorBrush x:Key="WindowTitleColorBrush" Color="{DynamicResource Primary700}"/>
+ <SolidColorBrush x:Key="AccentSelectedColorBrush" Color="{DynamicResource Primary500Foreground}"/>
+ <LinearGradientBrush x:Key="ProgressBrush" EndPoint="0.001,0.5" StartPoint="1.002,0.5">
+ <GradientStop Color="{DynamicResource Primary700}" Offset="0"/>
+ <GradientStop Color="{DynamicResource Primary300}" Offset="1"/>
+ </LinearGradientBrush>
+ <SolidColorBrush x:Key="CheckmarkFill" Color="{DynamicResource Primary500}"/>
+ <SolidColorBrush x:Key="RightArrowFill" Color="{DynamicResource Primary500}"/>
+ <SolidColorBrush x:Key="IdealForegroundColorBrush" Color="{DynamicResource Primary500Foreground}"/>
+ <SolidColorBrush x:Key="IdealForegroundDisabledBrush" Color="{DynamicResource Primary500}" Opacity="0.4"/>
+ <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.OnSwitchBrush.Win10" Color="{DynamicResource Primary500}" />
+ <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.OnSwitchMouseOverBrush.Win10" Color="{DynamicResource Primary400}" />
+ <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.ThumbIndicatorCheckedBrush.Win10" Color="{DynamicResource Primary500Foreground}" />
+
+ <!-- primary -->
+ <!--<SolidColorBrush x:Key="PrimaryHueDarkBrush" Color="#4D1DCF"/>
+ <SolidColorBrush x:Key="PrimaryHueDarkForegroundBrush" Color="#FFFFFF"/>-->
+ <!--accent-->
+ <SolidColorBrush x:Key="SecondaryAccentBrush" Color="{StaticResource FSE_PrimaryAccentColor}"/>
+ <SolidColorBrush x:Key="SecondaryAccentForegroundBrush" Color="{StaticResource FSE_PrimaryForegroundColor}"/>
+
+</ResourceDictionary> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Converters.xaml b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Converters.xaml
new file mode 100644
index 000000000..260fc92ca
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Converters.xaml
@@ -0,0 +1,45 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ xmlns:local="clr-namespace:Tango.StubsUtils.Service.UI.Resources">
+
+ <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
+ <converters:BooleanInverseConverter x:Key="BooleanInverseConverter" />
+ <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter" />
+ <converters:DateTimeUTCToShortDateConverter x:Key="DateTimeUTCToShortDateConverter" />
+ <converters:MathOperatorConverter x:Key="MathOperatorConverter" />
+ <converters:IsSegmentGradientConverter x:Key="IsSegmentGradientConverter" />
+ <converters:IsSegmentGradientToVisibilityConverter x:Key="IsSegmentGradientToVisibilityConverter" />
+ <converters:SegmentToBrushConverterMulti x:Key="SegmentToBrushConverterMulti" />
+ <converters:SegmentLengthToWidthConverter x:Key="SegmentLengthToWidthConverter" />
+ <converters:WidthHeightToRectConverter x:Key="WidthHeightToRectConverter" />
+ <converters:OneToPercentConverter x:Key="OneToPercentConverter" />
+ <converters:SmallerThanToBooleanConverter x:Key="SmallerThanToBooleanConverter" />
+ <converters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter" />
+ <converters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" />
+ <converters:TimeSpanToTwoDigitsTimeConverter x:Key="TimeSpanToTwoDigitsTimeConverter" />
+ <converters:TimeSpanToLabelConverter x:Key="TimeSpanToLabelConverter" />
+ <converters:GreaterThanToBooleanConverter x:Key="GreaterThanToBooleanConverter" />
+ <converters:ByteArrayToFileSizeConverter x:Key="ByteArrayToFileSizeConverter" />
+ <converters:EnumToVisibilityConverter x:Key="EnumToVisibilityConverter" />
+ <converters:EnumToBooleanConverter x:Key="EnumToBooleanConverter" />
+ <converters:DateTimeUTCToStringConverter x:Key="DateTimeUTCToStringConverter" />
+ <converters:NullObjectToBooleanConverter x:Key="NullObjectToBooleanConverter" />
+ <converters:IsNullToVisibilityConverter x:Key="IsNullToVisibilityConverter" />
+ <converters:StringToLinesConverter x:Key="StringToLinesConverter" />
+ <converters:ColorToIntegerConverter x:Key="ColorToIntegerConverter" />
+ <converters:StringEllipsisConverter x:Key="StringEllipsisConverter" />
+ <converters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" />
+ <converters:TimeSpanToMinutesConverter x:Key="TimeSpanToMinutesConverter" />
+ <converters:TimeSpanToSecondsConverter x:Key="TimeSpanToSecondsConverter" />
+ <converters:StringToTitleCaseConverter x:Key="StringToTitleCaseConverter" />
+ <converters:StringToOneLineConverter x:Key="StringToOneLineConverter" />
+ <converters:FilePathToFileNameConverter x:Key="FilePathToFileNameConverter" />
+ <converters:EnumToIntConverter x:Key="EnumToIntConverter" />
+ <converters:ObservableCollectionToViewSourceConverter x:Key="ObservableCollectionToViewSourceConverter" />
+ <converters:IsEqualToVisibilityConverter x:Key="IsEqualToVisibilityConverter" />
+ <converters:BooleanToYesNoConverter x:Key="BooleanToYesNoConverter" />
+ <converters:GenericMessageProtocolToStringConverter x:Key="GenericMessageProtocolToStringConverter" />
+ <converters:IsEqualConverter x:Key="IsEqualConverter" />
+ <converters:IsNotConverter x:Key="IsNotConverter" />
+</ResourceDictionary> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Fonts.xaml b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Fonts.xaml
new file mode 100644
index 000000000..b5ef75802
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Resources/Fonts.xaml
@@ -0,0 +1,14 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:sys="clr-namespace:System;assembly=mscorlib"
+ xmlns:local="clr-namespace:Tango.StubsUtils.Service.UI.Resources">
+
+ <sys:Double x:Key="FSE_DefaultFontSize">14</sys:Double>
+ <sys:Double x:Key="FSE_SmallFontSize">12</sys:Double>
+ <sys:Double x:Key="FSE_SmallerFontSize">10</sys:Double>
+ <sys:Double x:Key="FSE_LargeFontSize">16</sys:Double>
+ <sys:Double x:Key="FSE_LargerFontSize">18</sys:Double>
+ <sys:Double x:Key="FSE_MessageBoxTitleFontSize">16</sys:Double>
+ <sys:Double x:Key="FSE_ModuleHeaderFontSize">30</sys:Double>
+
+</ResourceDictionary> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/ServiceUISettings.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/ServiceUISettings.cs
new file mode 100644
index 000000000..92f7157ca
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/ServiceUISettings.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Settings;
+
+namespace Tango.StubsUtils.Service.UI
+{
+ public class ServiceUISettings : SettingsBase
+ {
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Tango.StubsUtils.Service.UI.csproj b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Tango.StubsUtils.Service.UI.csproj
new file mode 100644
index 000000000..c4cdbab42
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Tango.StubsUtils.Service.UI.csproj
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{20AF2BAF-85CD-4437-BC6F-6BA030F984EA}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <RootNamespace>Tango.StubsUtils.Service.UI</RootNamespace>
+ <AssemblyName>Tango.StubsUtils.Service.UI</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <WarningLevel>4</WarningLevel>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ <Deterministic>true</Deterministic>
+ <NuGetPackageImportStamp>
+ </NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="ControlzEx, Version=3.0.2.4, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll</HintPath>
+ </Reference>
+ <Reference Include="Hardcodet.Wpf.TaskbarNotification, Version=1.0.5.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\Hardcodet.NotifyIcon.Wpf.1.0.8\lib\net451\Hardcodet.Wpf.TaskbarNotification.dll</HintPath>
+ </Reference>
+ <Reference Include="MahApps.Metro, Version=1.6.5.1, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\MahApps.Metro.1.6.5\lib\net46\MahApps.Metro.dll</HintPath>
+ </Reference>
+ <Reference Include="MaterialDesignColors, Version=1.2.2.920, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\MaterialDesignColors.1.2.2\lib\net45\MaterialDesignColors.dll</HintPath>
+ </Reference>
+ <Reference Include="MaterialDesignThemes.Wpf, Version=3.0.1.920, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\MaterialDesignThemes.3.0.1\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xaml">
+ <RequiredTargetFramework>4.0</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="WindowsBase" />
+ <Reference Include="PresentationCore" />
+ <Reference Include="PresentationFramework" />
+ </ItemGroup>
+ <ItemGroup>
+ <ApplicationDefinition Include="App.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </ApplicationDefinition>
+ <Compile Include="ServiceUISettings.cs" />
+ <Compile Include="ViewModels\MainViewVM.cs" />
+ <Compile Include="Views\MainView.xaml.cs">
+ <DependentUpon>MainView.xaml</DependentUpon>
+ </Compile>
+ <Page Include="MainWindow.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Compile Include="App.xaml.cs">
+ <DependentUpon>App.xaml</DependentUpon>
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="MainWindow.xaml.cs">
+ <DependentUpon>MainWindow.xaml</DependentUpon>
+ <SubType>Code</SubType>
+ </Compile>
+ <Page Include="Resources\Colors.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Page Include="Resources\Converters.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Page Include="Resources\Fonts.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Page Include="Views\MainView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Resources.resx</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ <None Include="packages.config" />
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Tango.Core\Tango.Core.csproj">
+ <Project>{A34EE0F0-649D-41C8-8489-B6F1CC6924EE}</Project>
+ <Name>Tango.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.Logging\Tango.Logging.csproj">
+ <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project>
+ <Name>Tango.Logging</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.Settings\Tango.Settings.csproj">
+ <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project>
+ <Name>Tango.Settings</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.SharedUI\Tango.SharedUI.csproj">
+ <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project>
+ <Name>Tango.SharedUI</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Tango.StubsUtils.Service\Tango.StubsUtils.Service.csproj">
+ <Project>{452df7f4-bfbf-45b1-9a27-d6b1888ac10b}</Project>
+ <Name>Tango.StubsUtils.Service</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\machine_icon_connected.ico" />
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\machine_icon_none.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\machine_icon_connected.png" />
+ <Resource Include="Images\machine_icon_disconnected.ico" />
+ <Resource Include="Images\machine_icon_disconnected.png" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Import Project="..\..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets" Condition="Exists('..\..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets'))" />
+ </Target>
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/ViewModels/MainViewVM.cs
new file mode 100644
index 000000000..4e8b144e5
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/ViewModels/MainViewVM.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using Tango.Core.Commands;
+using Tango.SharedUI;
+using Tango.SharedUI.Helpers;
+
+namespace Tango.StubsUtils.Service.UI.ViewModels
+{
+ public class MainViewVM : ViewModel
+ {
+ private StubsService _service;
+ public StubsService Service
+ {
+ get { return _service; }
+ set { _service = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _isTrayIconVisible;
+ public bool IsTrayIconVisible
+ {
+ get { return _isTrayIconVisible; }
+ set { _isTrayIconVisible = value; RaisePropertyChangedAuto(); }
+ }
+
+
+ public RelayCommand ExitCommand { get; set; }
+ public RelayCommand OpenCommand { get; set; }
+
+ public MainViewVM()
+ {
+ Init();
+ ExitCommand = new RelayCommand(ExitApplication);
+ OpenCommand = new RelayCommand(OpenMainWindow);
+ IsTrayIconVisible = true;
+ }
+
+ public async void Init()
+ {
+ Service = new StubsService();
+ await Service.Start();
+
+ await Task.Delay(10000);
+ await Service.Connect();
+ }
+
+ private async void OpenMainWindow()
+ {
+ Application.Current.MainWindow.Visibility = Visibility.Visible;
+ await Task.Delay(200);
+ Application.Current.MainWindow.WindowState = WindowState.Normal;
+ Application.Current.MainWindow.Focus();
+ Application.Current.MainWindow.Activate();
+ IsTrayIconVisible = false;
+ }
+
+ public async void ExitApplication()
+ {
+ IsTrayIconVisible = false;
+ UIHelper.DoEvents();
+ await Task.Delay(1000);
+ Environment.Exit(0);
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Views/MainView.xaml b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Views/MainView.xaml
new file mode 100644
index 000000000..eb2c24e44
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Views/MainView.xaml
@@ -0,0 +1,144 @@
+<UserControl x:Class="Tango.StubsUtils.Service.UI.Views.MainView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:tb="http://www.hardcodet.net/taskbar"
+ xmlns:material="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:local="clr-namespace:Tango.StubsUtils.Service.UI.Views"
+ xmlns:vm="clr-namespace:Tango.StubsUtils.Service.UI.ViewModels"
+ mc:Ignorable="d"
+ d:DesignHeight="450" d:DesignWidth="800" Background="{StaticResource FSE_PrimaryBackgroundBrush}" d:DataContext="{d:DesignInstance Type=vm:MainViewVM,IsDesignTimeCreatable=False}">
+
+ <UserControl.Resources>
+ <RadialGradientBrush x:Key="FSE_LED_GrayBrush">
+ <GradientStop Offset="0" Color="Gray" />
+ <GradientStop Offset="1" Color="#4E4E4E" />
+ </RadialGradientBrush>
+ <RadialGradientBrush x:Key="FSE_LED_GreenBrush">
+ <GradientStop Offset="0" Color="#4DFC1E" />
+ <GradientStop Offset="1" Color="#096D07" />
+ </RadialGradientBrush>
+ <RadialGradientBrush x:Key="FSE_LED_RedBrush">
+ <GradientStop Offset="0" Color="#FA6565" />
+ <GradientStop Offset="1" Color="#A32323" />
+ </RadialGradientBrush>
+ </UserControl.Resources>
+
+ <Grid>
+ <tb:TaskbarIcon x:Name="taskIcon" x:FieldModifier="public"
+ Visibility="{Binding IsTrayIconVisible,Converter={StaticResource BooleanToVisibilityConverter}}"
+ ToolTipText="Tango Stubs Service"
+ MenuActivation="RightClick"
+ PopupActivation="DoubleClick">
+
+ <tb:TaskbarIcon.Style>
+ <Style TargetType="tb:TaskbarIcon">
+ <Setter Property="IconSource" Value="/Images/machine_icon_disconnected.ico"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Service.IsConnected}" Value="True">
+ <Setter Property="IconSource" Value="/Images/machine_icon_connected.ico"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </tb:TaskbarIcon.Style>
+ <tb:TaskbarIcon.TrayToolTip>
+ <Border Background="{StaticResource FSE_PrimaryBackgroundBrush}" BorderThickness="1" BorderBrush="{StaticResource FSE_PrimaryBackgroundLightBrush}" CornerRadius="5" Padding="20 10">
+ <StackPanel TextElement.Foreground="{StaticResource FSE_PrimaryForegroundBrush}">
+ <DockPanel>
+ <Image VerticalAlignment="Top" Source="/Images/machine_icon_none.png" Stretch="None" />
+
+ <StackPanel Margin="10 0 0 0" VerticalAlignment="Top">
+ <TextBlock FontSize="{StaticResource FSE_LargeFontSize}">Tango Stubs Service</TextBlock>
+ <DockPanel Margin="0 5 0 0">
+ <Ellipse Width="12" Height="12" Stroke="#353535">
+ <Ellipse.Style>
+ <Style TargetType="Ellipse">
+ <Setter Property="Fill" Value="{StaticResource FSE_LED_RedBrush}"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Service.IsConnected}" Value="True">
+ <Setter Property="Fill" Value="{StaticResource FSE_LED_GreenBrush}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Ellipse.Style>
+ </Ellipse>
+ <TextBlock Margin="5 0 0 0" FontWeight="SemiBold">
+ <TextBlock.Style>
+ <Style TargetType="TextBlock">
+ <Setter Property="Text" Value="Disconnected"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource FSE_RedBrush}"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Service.IsConnected}" Value="True">
+ <Setter Property="Text" Value="Connected"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource FSE_GreenBrush}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBlock.Style>
+ </TextBlock>
+ </DockPanel>
+ </StackPanel>
+ </DockPanel>
+ </StackPanel>
+ </Border>
+ </tb:TaskbarIcon.TrayToolTip>
+ <tb:TaskbarIcon.ContextMenu>
+ <ContextMenu>
+ <MenuItem Height="120" IsEnabled="False" Opacity="1" VerticalContentAlignment="Top" HorizontalContentAlignment="Left">
+ <MenuItem.Header>
+ <StackPanel Margin="-40 -10 0 40" HorizontalAlignment="Left" VerticalAlignment="Top" TextElement.Foreground="{StaticResource FSE_PrimaryForegroundBrush}">
+ <DockPanel>
+ <Image VerticalAlignment="Top" Source="/Images/machine_icon_none.png" Stretch="None" />
+
+ <StackPanel Margin="10 0 0 0" VerticalAlignment="Top">
+ <TextBlock FontSize="{StaticResource FSE_LargeFontSize}">Tango Stubs Service</TextBlock>
+ <DockPanel Margin="0 5 0 0">
+ <Ellipse Width="12" Height="12" Stroke="#353535">
+ <Ellipse.Style>
+ <Style TargetType="Ellipse">
+ <Setter Property="Fill" Value="{StaticResource FSE_LED_RedBrush}"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Service.IsConnected}" Value="True">
+ <Setter Property="Fill" Value="{StaticResource FSE_LED_GreenBrush}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Ellipse.Style>
+ </Ellipse>
+ <TextBlock Margin="5 0 0 0" FontWeight="SemiBold">
+ <TextBlock.Style>
+ <Style TargetType="TextBlock">
+ <Setter Property="Text" Value="Disconnected"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource FSE_RedBrush}"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Service.IsConnected}" Value="True">
+ <Setter Property="Text" Value="Connected"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource FSE_GreenBrush}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBlock.Style>
+ </TextBlock>
+ </DockPanel>
+ </StackPanel>
+ </DockPanel>
+ </StackPanel>
+ </MenuItem.Header>
+ </MenuItem>
+
+ <MenuItem Header="Open" Command="{Binding OpenCommand}">
+ <MenuItem.Icon>
+ <material:PackIcon Kind="OpenInApp" />
+ </MenuItem.Icon>
+ </MenuItem>
+ <MenuItem Header="Exit" Command="{Binding ExitCommand}">
+ <MenuItem.Icon>
+ <material:PackIcon Kind="PowerOff" />
+ </MenuItem.Icon>
+ </MenuItem>
+ </ContextMenu>
+ </tb:TaskbarIcon.ContextMenu>
+ </tb:TaskbarIcon>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Views/MainView.xaml.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Views/MainView.xaml.cs
new file mode 100644
index 000000000..1c51be6d4
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/Views/MainView.xaml.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Tango.StubsUtils.Service.UI.ViewModels;
+
+namespace Tango.StubsUtils.Service.UI.Views
+{
+ /// <summary>
+ /// Interaction logic for MainView.xaml
+ /// </summary>
+ public partial class MainView : UserControl
+ {
+ public MainView()
+ {
+ InitializeComponent();
+ DataContext = new MainViewVM();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/packages.config b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/packages.config
new file mode 100644
index 000000000..96b22d216
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service.UI/packages.config
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="ControlzEx" version="3.0.2.4" targetFramework="net461" />
+ <package id="Hardcodet.NotifyIcon.Wpf" version="1.0.8" targetFramework="net461" />
+ <package id="MahApps.Metro" version="1.6.5" targetFramework="net461" />
+ <package id="MaterialDesignColors" version="1.2.2" targetFramework="net461" />
+ <package id="MaterialDesignThemes" version="3.0.1" targetFramework="net461" />
+ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
+</packages> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/Properties/AssemblyInfo.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..c0a90674c
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tango.StubsUtils.Service")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.StubsUtils.Service")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("452df7f4-bfbf-45b1-9a27-d6b1888ac10b")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubReflection.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubReflection.cs
new file mode 100644
index 000000000..2b0f237ea
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubReflection.cs
@@ -0,0 +1,49 @@
+using FastMember;
+using Google.Protobuf;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.PMR;
+using Tango.PMR.Common;
+
+namespace Tango.StubsUtils.Service
+{
+ public class StubReflection
+ {
+ public Type Type { get; set; }
+ public MessageType MessageType { get; set; }
+ public List<PropertyInfo> Properties { get; set; }
+ public TypeAccessor Accesor { get; set; }
+ public MessageParser Parser { get; set; }
+
+ public StubReflection()
+ {
+ Properties = new List<PropertyInfo>();
+ }
+
+ public static StubReflection FromStubName(String stubName, List<Type> stubTypes)
+ {
+ StubReflection reflection = new StubReflection();
+
+ var stubType = stubTypes.SingleOrDefault(x => x.Name.ToLower() == stubName.ToLower() || x.Name.Replace("Request", "").ToLower() == stubName.ToLower());
+
+ if (stubType == null)
+ {
+ throw new InvalidOperationException($"Invalid stub name '{stubName}'.");
+ }
+
+ reflection.Type = stubType;
+ reflection.MessageType = MessageFactory.ParseMessageType(reflection.Type.Name);
+ reflection.Properties = stubType.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();
+ reflection.Accesor = TypeAccessor.Create(stubType);
+
+ var instance = Activator.CreateInstance(stubType);
+ reflection.Parser = stubType.GetProperty("Parser").GetValue(instance) as MessageParser;
+
+ return reflection;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubsService.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubsService.cs
new file mode 100644
index 000000000..05b2d518c
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubsService.cs
@@ -0,0 +1,334 @@
+using Google.Protobuf;
+using Newtonsoft.Json;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.IO.Pipes;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Tango.Core;
+using Tango.Core.ExtensionMethods;
+using Tango.Logging;
+using Tango.PMR;
+using Tango.PMR.Common;
+using Tango.Settings;
+using Tango.StubsUtils.Shared;
+using Tango.Transport;
+using Tango.Transport.Adapters;
+using Tango.Transport.Transporters;
+
+namespace Tango.StubsUtils.Service
+{
+ public class StubsService : ExtendedObject
+ {
+ private const string PIPE_NAME = "Tango_Stubs_Server";
+ private NamedPipeServerStream _server;
+ private StreamReader _reader;
+ private StreamWriter _writer;
+ private BinaryFormatter _formatter;
+ private StubsServiceSettings _settings;
+ private bool _initialized;
+ private List<Type> _stubsTypes;
+ private Dictionary<String, StubReflection> _stubsLookup;
+ private Thread _communicationThread;
+
+ #region Properties
+
+ private ITransporter _transporter;
+ public ITransporter Transporter
+ {
+ get { return _transporter; }
+ private set { _transporter = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _isStarted;
+ public bool IsStarted
+ {
+ get { return _isStarted; }
+ private set { _isStarted = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _isConnected;
+ public bool IsConnected
+ {
+ get { return _isConnected; }
+ set { _isConnected = value; RaisePropertyChangedAuto(); }
+ }
+
+ private bool _enableLogs;
+ public bool EnableLogs
+ {
+ get { return _enableLogs; }
+ set { _enableLogs = value; RaisePropertyChangedAuto(); }
+ }
+
+ #endregion
+
+ #region Constructors
+
+ public StubsService()
+ {
+ _settings = SettingsManager.Default.GetOrCreate<StubsServiceSettings>();
+ _settings.Save();
+ }
+
+ #endregion
+
+ #region Start/Stop
+
+ private void Initialize()
+ {
+ if (!_initialized)
+ {
+ _stubsTypes = new List<Type>();
+ _stubsLookup = new Dictionary<string, StubReflection>();
+
+ foreach (var type in typeof(MessageFactory).Assembly.GetTypes().Where(x => x.Namespace != null && x.Namespace.Contains("Stubs") && (x.Name.Contains("Request") || x.Name.Contains("Response")) && !x.Name.Contains("Reflection")).ToList())
+ {
+ _stubsTypes.Add(type);
+ }
+
+ _server = new NamedPipeServerStream(PIPE_NAME);
+ _reader = new StreamReader(_server);
+ _writer = new StreamWriter(_server);
+ _formatter = new BinaryFormatter();
+ _communicationThread = new Thread(CommunicationMethod);
+ _communicationThread.IsBackground = true;
+ _communicationThread.Start();
+
+ _initialized = true;
+ }
+ }
+
+ public Task Start()
+ {
+ return Task.Factory.StartNew(() =>
+ {
+ if (!IsStarted)
+ {
+ try
+ {
+ LogManager.Log("Starting stubs service...");
+ IsStarted = true;
+ Initialize();
+ LogManager.Log("Starting IPC service...");
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error starting stubs service.");
+ }
+ }
+ });
+ }
+
+ public Task Stop()
+ {
+ return Task.Factory.StartNew(() =>
+ {
+ if (IsStarted)
+ {
+ IsStarted = false;
+ }
+ });
+ }
+
+ #endregion
+
+ #region Connect/Disconnect
+
+ public async Task Connect()
+ {
+ if (!IsStarted) throw new InvalidOperationException("Cannot connect the transporter before the service has started.");
+
+ if (!IsConnected)
+ {
+ Transporter = new BasicTransporter(new UsbTransportAdapter(_settings.USBPort));
+ Transporter.UseKeepAlive = false;
+ await Transporter.Connect();
+ IsConnected = true;
+ }
+ }
+
+ public async Task Disconnect()
+ {
+ if (IsConnected)
+ {
+ await Transporter.Disconnect();
+ }
+ }
+
+ #endregion
+
+ #region Communication
+
+ private void CommunicationMethod()
+ {
+ while (IsStarted)
+ {
+ try
+ {
+ _server.WaitForConnection();
+ var request = _reader.ReadLine();
+
+ if (EnableLogs) LogManager.Log($"Stub package received: '{request}'...");
+
+ var package = new StubPackageRequestDTO();
+ package.Arguments = request.Split(' ');
+
+ if (EnableLogs) LogManager.Log($"Stub package constructed: '{package.ToJsonString()}'...");
+
+ var response = ProcessStubPackage(package);
+
+ if (EnableLogs) LogManager.Log($"Stub package response: '{response.ToJsonString()}'...");
+
+ _writer.Write(response.ToString());
+ _writer.Flush();
+ }
+ catch (Exception ex)
+ {
+ if (EnableLogs) LogManager.Log(ex, "Error processing stub package.");
+
+ try
+ {
+ var response = new StubPackageResponseDTO()
+ {
+ Status = StubPackageResponseStatus.Error,
+ Message = $"Error processing stub package\n{ex.FlattenMessage()}"
+ };
+
+ _writer.WriteLine(response.ToString());
+ _writer.Flush();
+ _server.Disconnect();
+ }
+ catch { }
+ }
+ finally
+ {
+ _server.Disconnect();
+ }
+ }
+ }
+
+ #endregion
+
+ #region Process Package
+
+ private StubPackageResponseDTO ProcessStubPackage(StubPackageRequestDTO package)
+ {
+ StubPackageResponseDTO response = new StubPackageResponseDTO();
+
+ if (Transporter == null || Transporter.State != TransportComponentState.Connected)
+ {
+ response.Status = StubPackageResponseStatus.NoConnection;
+ response.Message = "Machine is disconnected.";
+ return response;
+ }
+
+ try
+ {
+ if (EnableLogs) LogManager.Log("Processing package...");
+
+ String stubName = package.Arguments[0];
+ List<String> arguments = package.Arguments.Skip(1).ToList();
+
+ StubReflection stubReflection = GetStubReflection(stubName);
+
+ MessageContainer requestContainer = new MessageContainer();
+ requestContainer.Token = Guid.NewGuid().ToString();
+ requestContainer.Type = stubReflection.MessageType;
+
+ IMessage request = Activator.CreateInstance(stubReflection.Type) as IMessage;
+
+ for (int i = 0; i < arguments.Count; i++)
+ {
+ String argument = arguments[i];
+
+ if (i >= stubReflection.Properties.Count)
+ {
+ throw new ArgumentOutOfRangeException($"Argument '{argument}' index is out of range for stub '{stubReflection.Type.Name}'.");
+ }
+
+ PropertyInfo prop = stubReflection.Properties[i];
+
+ if (prop.PropertyType == typeof(UInt32))
+ {
+ prop.SetValue(request, UInt32.Parse(argument));
+ }
+ else if (prop.PropertyType == typeof(bool))
+ {
+ prop.SetValue(request, bool.Parse(argument));
+ }
+ else if (typeof(IList).IsAssignableFrom(prop.PropertyType))
+ {
+ IList arr = prop.GetValue(request) as IList;
+ foreach (var item in argument.Split(','))
+ {
+ object converted = Convert.ChangeType(item, prop.PropertyType.GetGenericArguments()[0]);
+ arr.Add(converted);
+ }
+ }
+ else
+ {
+ object converted = Convert.ChangeType(argument, prop.PropertyType);
+ prop.SetValue(request, converted);
+ }
+ }
+
+ if (EnableLogs) LogManager.Log($"Request stub constructed:\n{request.ToJsonString()}");
+
+ requestContainer.Data = request.ToByteString();
+ var responseContainer = Transporter.SendRequest(requestContainer, new TransportRequestConfig() { ThreadingMode = TransportThreadingMode.ThreadPool }).Result;
+
+ var stubResponseReflection = GetStubReflection(responseContainer.Type.ToOriginalName());
+ IMessage stubResponse = stubResponseReflection.Parser.ParseFrom(responseContainer.Data);
+
+ String responseMessage = String.Empty;
+
+ foreach (var prop in stubResponseReflection.Properties)
+ {
+ responseMessage += $"{prop.Name}: {prop.GetValue(stubResponse).ToStringSafe()}\n";
+ }
+
+ if (EnableLogs)
+ {
+ String responseJson = stubResponse.ToJsonString();
+ LogManager.Log($"Response:\n{stubResponse}");
+ }
+
+ response.Status = StubPackageResponseStatus.OK;
+ response.Message = responseMessage;
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error processing stub package.");
+ response.Status = StubPackageResponseStatus.Error;
+ response.Message = ex.FlattenMessage();
+ }
+
+ return response;
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private StubReflection GetStubReflection(String stubName)
+ {
+ if (_stubsLookup.ContainsKey(stubName))
+ {
+ return _stubsLookup[stubName];
+ }
+
+ var stubReflection = StubReflection.FromStubName(stubName, _stubsTypes);
+ _stubsLookup[stubName] = stubReflection;
+ return stubReflection;
+ }
+
+ #endregion
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubsServiceSettings.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubsServiceSettings.cs
new file mode 100644
index 000000000..8741065cf
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/StubsServiceSettings.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Settings;
+
+namespace Tango.StubsUtils.Service
+{
+ public class StubsServiceSettings : SettingsBase
+ {
+ public String USBPort { get; set; }
+
+ public StubsServiceSettings()
+ {
+ USBPort = "COM1";
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/Tango.StubsUtils.Service.csproj b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/Tango.StubsUtils.Service.csproj
new file mode 100644
index 000000000..40ec9d29f
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/Tango.StubsUtils.Service.csproj
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Tango.StubsUtils.Service</RootNamespace>
+ <AssemblyName>Tango.StubsUtils.Service</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="FastMember, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\FastMember.1.5.0\lib\net461\FastMember.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="StubReflection.cs" />
+ <Compile Include="StubsService.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="StubsServiceSettings.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Tango.Core\Tango.Core.csproj">
+ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
+ <Name>Tango.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.Logging\Tango.Logging.csproj">
+ <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project>
+ <Name>Tango.Logging</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.PMR\Tango.PMR.csproj">
+ <Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project>
+ <Name>Tango.PMR</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.Settings\Tango.Settings.csproj">
+ <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project>
+ <Name>Tango.Settings</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\Tango.Transport\Tango.Transport.csproj">
+ <Project>{74e700b0-1156-4126-be40-ee450d3c3026}</Project>
+ <Name>Tango.Transport</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Tango.StubsUtils.Shared\Tango.StubsUtils.Shared.csproj">
+ <Project>{dae96f06-72cd-411d-90a3-9456ae79f699}</Project>
+ <Name>Tango.StubsUtils.Shared</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="app.config" />
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/app.config b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/app.config
new file mode 100644
index 000000000..f63670818
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/app.config
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.0.5.0" newVersion="5.0.5.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/packages.config b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/packages.config
new file mode 100644
index 000000000..52834fea3
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Service/packages.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="FastMember" version="1.5.0" targetFramework="net461" />
+ <package id="Google.Protobuf" version="3.4.1" targetFramework="net461" />
+ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
+</packages> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/App.config b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/App.config
new file mode 100644
index 000000000..731f6de6c
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
+ </startup>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Program.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Program.cs
new file mode 100644
index 000000000..b72e15236
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Program.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.IO.Pipes;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.StubsUtils.Shared;
+
+namespace Tango.StubsUtils.SessionClient.CLI
+{
+ class Program
+ {
+ private const string PIPE_NAME = "Tango_Stubs_Server";
+
+ static void Main(string[] args)
+ {
+ String line = String.Empty;
+
+ Console.WriteLine("Tango Stub Session Client v1.0");
+
+ while (true)
+ {
+ Console.Write("> ");
+ line = Console.ReadLine();
+
+ if (line.ToLower() == "exit")
+ {
+ Environment.Exit(0);
+ }
+
+ args = line.Split(' ');
+
+ StubPackageResponseDTO response = null;
+
+ try
+ {
+ var _client = new NamedPipeClientStream(PIPE_NAME);
+ _client.Connect(5000);
+
+ var writer = new StreamWriter(_client);
+
+ var jsonRequest = String.Join(" ", args);
+
+ writer.WriteLine(jsonRequest);
+ writer.Flush();
+
+ var reader = new StreamReader(_client);
+ String responseString = reader.ReadToEnd();
+ response = new StubPackageResponseDTO();
+ response.Status = responseString.StartsWith("Status: OK") ? StubPackageResponseStatus.OK : StubPackageResponseStatus.Error;
+ response.Message = responseString;
+ }
+ catch (Exception ex)
+ {
+ OnError($"Error communicating with the stubs service. {ex.Message}");
+ }
+
+ if (response.Status == StubPackageResponseStatus.OK)
+ {
+ Console.ForegroundColor = ConsoleColor.Gray;
+ Console.WriteLine(response.Message);
+ }
+ else
+ {
+ OnError(response.Message);
+ }
+ }
+ }
+
+ private static void OnError(String error)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine($"{error}");
+ Console.ForegroundColor = ConsoleColor.Gray;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..14f843bcf
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tango.StubsUtils.SessionClient.CLI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.StubsUtils.SessionClient.CLI")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f1b727f5-adf5-4a81-a740-7e64e48b29d4")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Tango.StubsUtils.SessionClient.CLI.csproj b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Tango.StubsUtils.SessionClient.CLI.csproj
new file mode 100644
index 000000000..6ccf31b7b
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.SessionClient.CLI/Tango.StubsUtils.SessionClient.CLI.csproj
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{F1B727F5-ADF5-4A81-A740-7E64E48B29D4}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>Tango.StubsUtils.SessionClient.CLI</RootNamespace>
+ <AssemblyName>tangostub_s</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Tango.StubsUtils.Shared\Tango.StubsUtils.Shared.csproj">
+ <Project>{dae96f06-72cd-411d-90a3-9456ae79f699}</Project>
+ <Name>Tango.StubsUtils.Shared</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/Properties/AssemblyInfo.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..aad82fef6
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tango.StubsUtils.Shared")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.StubsUtils.Shared")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("dae96f06-72cd-411d-90a3-9456ae79f699")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageRequestDTO.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageRequestDTO.cs
new file mode 100644
index 000000000..625fe931b
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageRequestDTO.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.StubsUtils.Shared
+{
+ [Serializable]
+ public class StubPackageRequestDTO
+ {
+ public string[] Arguments { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageResponseDTO.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageResponseDTO.cs
new file mode 100644
index 000000000..b020c4f84
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageResponseDTO.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.StubsUtils.Shared
+{
+ [Serializable]
+ public class StubPackageResponseDTO
+ {
+ public StubPackageResponseStatus Status { get; set; }
+ public String Message { get; set; }
+
+ public override string ToString()
+ {
+ return $"Status: {Status}\n{Message}";
+ }
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageResponseStatus.cs b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageResponseStatus.cs
new file mode 100644
index 000000000..4edd47d6c
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/StubPackageResponseStatus.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.StubsUtils.Shared
+{
+ [Serializable]
+ public enum StubPackageResponseStatus
+ {
+ OK,
+ Error,
+ NoConnection
+ }
+}
diff --git a/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/Tango.StubsUtils.Shared.csproj b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/Tango.StubsUtils.Shared.csproj
new file mode 100644
index 000000000..a7b58f6ea
--- /dev/null
+++ b/Software/Visual_Studio/StubsUtils/Tango.StubsUtils.Shared/Tango.StubsUtils.Shared.csproj
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{DAE96F06-72CD-411D-90A3-9456AE79F699}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Tango.StubsUtils.Shared</RootNamespace>
+ <AssemblyName>Tango.StubsUtils.Shared</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\Build\StubsUtils\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="StubPackageRequestDTO.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="StubPackageResponseDTO.cs" />
+ <Compile Include="StubPackageResponseStatus.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln
index 015451331..96e3aa775 100644
--- a/Software/Visual_Studio/Tango.sln
+++ b/Software/Visual_Studio/Tango.sln
@@ -441,6 +441,20 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.PPC.DataSynchronizer.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.PasswordHashUtil.CLI", "Utilities\Tango.PasswordHashUtil.CLI\Tango.PasswordHashUtil.CLI.csproj", "{F1DC98EF-C50A-4E84-9A39-211A68626FBA}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StubsUtils", "StubsUtils", "{4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.StubsUtils.Service.UI", "StubsUtils\Tango.StubsUtils.Service.UI\Tango.StubsUtils.Service.UI.csproj", "{20AF2BAF-85CD-4437-BC6F-6BA030F984EA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.StubsUtils.Client.CLI", "StubsUtils\Tango.StubsUtils.Client.CLI\Tango.StubsUtils.Client.CLI.csproj", "{2ED5D897-DF22-491E-8410-D01383B3DAD2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.StubsUtils.Service", "StubsUtils\Tango.StubsUtils.Service\Tango.StubsUtils.Service.csproj", "{452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.StubsUtils.Shared", "StubsUtils\Tango.StubsUtils.Shared\Tango.StubsUtils.Shared.csproj", "{DAE96F06-72CD-411D-90A3-9456AE79F699}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.StubsUtils.PerformanceTest.CLI", "StubsUtils\Tango.StubsUtils.PerformanceTest.CLI\Tango.StubsUtils.PerformanceTest.CLI.csproj", "{F423324C-7D0A-4512-BEBA-DF3A931A09F6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.StubsUtils.SessionClient.CLI", "StubsUtils\Tango.StubsUtils.SessionClient.CLI\Tango.StubsUtils.SessionClient.CLI.csproj", "{F1B727F5-ADF5-4A81-A740-7E64E48B29D4}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -4176,6 +4190,126 @@ Global
{F1DC98EF-C50A-4E84-9A39-211A68626FBA}.Release|x64.Build.0 = Release|Any CPU
{F1DC98EF-C50A-4E84-9A39-211A68626FBA}.Release|x86.ActiveCfg = Release|Any CPU
{F1DC98EF-C50A-4E84-9A39-211A68626FBA}.Release|x86.Build.0 = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|ARM.Build.0 = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|x64.Build.0 = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Debug|x86.Build.0 = Debug|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|ARM.ActiveCfg = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|ARM.Build.0 = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|ARM64.Build.0 = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|x64.ActiveCfg = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|x64.Build.0 = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|x86.ActiveCfg = Release|Any CPU
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA}.Release|x86.Build.0 = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|ARM.Build.0 = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|x64.Build.0 = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Debug|x86.Build.0 = Debug|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|ARM.ActiveCfg = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|ARM.Build.0 = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|ARM64.Build.0 = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|x64.ActiveCfg = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|x64.Build.0 = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|x86.ActiveCfg = Release|Any CPU
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2}.Release|x86.Build.0 = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|ARM.Build.0 = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|x64.Build.0 = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Debug|x86.Build.0 = Debug|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|ARM.ActiveCfg = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|ARM.Build.0 = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|ARM64.Build.0 = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|x64.ActiveCfg = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|x64.Build.0 = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|x86.ActiveCfg = Release|Any CPU
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B}.Release|x86.Build.0 = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|ARM.Build.0 = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|x64.Build.0 = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Debug|x86.Build.0 = Debug|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|ARM.ActiveCfg = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|ARM.Build.0 = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|ARM64.Build.0 = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|x64.ActiveCfg = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|x64.Build.0 = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|x86.ActiveCfg = Release|Any CPU
+ {DAE96F06-72CD-411D-90A3-9456AE79F699}.Release|x86.Build.0 = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|ARM.Build.0 = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|x64.Build.0 = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Debug|x86.Build.0 = Debug|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|ARM.ActiveCfg = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|ARM.Build.0 = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|ARM64.Build.0 = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|x64.ActiveCfg = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|x64.Build.0 = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|x86.ActiveCfg = Release|Any CPU
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6}.Release|x86.Build.0 = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|ARM.Build.0 = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|x64.Build.0 = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Debug|x86.Build.0 = Debug|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|ARM.ActiveCfg = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|ARM.Build.0 = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|ARM64.Build.0 = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|x64.ActiveCfg = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|x64.Build.0 = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|x86.ActiveCfg = Release|Any CPU
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -4329,14 +4463,20 @@ Global
{949857A0-777D-4A32-8668-7163E404D800} = {5F6BBAA8-EAD0-4B18-97E5-55B4F56DD760}
{3E07ED4E-A755-443F-B18C-3775555A2DD7} = {C81ED1A3-D18C-4D80-A8F5-061994A14A60}
{F1DC98EF-C50A-4E84-9A39-211A68626FBA} = {5F6BBAA8-EAD0-4B18-97E5-55B4F56DD760}
+ {20AF2BAF-85CD-4437-BC6F-6BA030F984EA} = {4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}
+ {2ED5D897-DF22-491E-8410-D01383B3DAD2} = {4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}
+ {452DF7F4-BFBF-45B1-9A27-D6B1888AC10B} = {4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}
+ {DAE96F06-72CD-411D-90A3-9456AE79F699} = {4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}
+ {F423324C-7D0A-4512-BEBA-DF3A931A09F6} = {4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}
+ {F1B727F5-ADF5-4A81-A740-7E64E48B29D4} = {4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- BuildVersion_UseGlobalSettings = False
- BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs
- BuildVersion_StartDate = 2000/1/1
- BuildVersion_UpdateFileVersion = False
- BuildVersion_UpdateAssemblyVersion = True
- BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear
SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6}
+ BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear
+ BuildVersion_UpdateAssemblyVersion = True
+ BuildVersion_UpdateFileVersion = False
+ BuildVersion_StartDate = 2000/1/1
+ BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs
+ BuildVersion_UseGlobalSettings = False
EndGlobalSection
EndGlobal