diff --git a/PepperDash.Essentials.4Series.sln b/PepperDash.Essentials.4Series.sln index ebca72e3..658b8432 100644 --- a/PepperDash.Essentials.4Series.sln +++ b/PepperDash.Essentials.4Series.sln @@ -1,270 +1,297 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.33213.308 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PepperDash.Essentials.Devices.Common", "src\PepperDash.Essentials.Devices.Common\PepperDash.Essentials.Devices.Common.csproj", "{53E204B7-97DD-441D-A96C-721DF014DF82}" - ProjectSection(ProjectDependencies) = postProject - {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PepperDash.Essentials", "src\PepperDash.Essentials\PepperDash.Essentials.csproj", "{CB3B11BA-625C-4D35-B663-FDC5BE9A230E}" - ProjectSection(ProjectDependencies) = postProject - {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PepperDash.Essentials.Core", "src\PepperDash.Essentials.Core\PepperDash.Essentials.Core.csproj", "{3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}" - ProjectSection(ProjectDependencies) = postProject - {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile Control", "Mobile Control", "{B24989D7-32B5-48D5-9AE1-5F3B17D25206}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash.Essentials.MobileControl", "src\PepperDash.Essentials.MobileControl\PepperDash.Essentials.MobileControl.csproj", "{F6D362DE-2256-44B1-927A-8CE4705D839A}" - ProjectSection(ProjectDependencies) = postProject - {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash.Essentials.MobileControl.Messengers", "src\PepperDash.Essentials.MobileControl.Messengers\PepperDash.Essentials.MobileControl.Messengers.csproj", "{B438694F-8FF7-464A-9EC8-10427374471F}" - ProjectSection(ProjectDependencies) = postProject - {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Essentials", "Essentials", "{AD98B742-8D85-481C-A69D-D8D8ABED39EA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash.Core", "src\PepperDash.Core\PepperDash.Core.csproj", "{E5336563-1194-501E-BC4A-79AD9283EF90}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrestronMock", "src\CrestronMock\CrestronMock.csproj", "{01191C7B-606D-4169-81B0-BC8BC1623CE9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EssentialsTests", "Tests\EssentialsTests\EssentialsTests.csproj", "{3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug 4.7.2|Any CPU = Debug 4.7.2|Any CPU - Debug 4.7.2|x64 = Debug 4.7.2|x64 - Debug 4.7.2|x86 = Debug 4.7.2|x86 - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - Test|Any CPU = Test|Any CPU - Test|x64 = Test|x64 - Test|x86 = Test|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|Any CPU.ActiveCfg = Debug 4.7.2|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|Any CPU.Build.0 = Debug 4.7.2|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|Any CPU.Build.0 = Debug|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|x64.ActiveCfg = Debug|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|x64.Build.0 = Debug|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|x86.ActiveCfg = Debug|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|x86.Build.0 = Debug|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|Any CPU.ActiveCfg = Release|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|Any CPU.Build.0 = Release|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|x64.ActiveCfg = Release|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|x64.Build.0 = Release|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|x86.ActiveCfg = Release|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|x86.Build.0 = Release|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|Any CPU.ActiveCfg = Test|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|Any CPU.Build.0 = Test|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|x64.ActiveCfg = Test|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|x64.Build.0 = Test|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|x86.ActiveCfg = Test|Any CPU - {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|x86.Build.0 = Test|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|Any CPU.ActiveCfg = Debug 4.7.2|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|Any CPU.Build.0 = Debug 4.7.2|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|x64.ActiveCfg = Debug|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|x64.Build.0 = Debug|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|x86.ActiveCfg = Debug|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|x86.Build.0 = Debug|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|Any CPU.Build.0 = Release|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|x64.ActiveCfg = Release|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|x64.Build.0 = Release|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|x86.ActiveCfg = Release|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|x86.Build.0 = Release|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|Any CPU.ActiveCfg = Test|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|Any CPU.Build.0 = Test|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|x64.ActiveCfg = Test|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|x64.Build.0 = Test|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|x86.ActiveCfg = Test|Any CPU - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|x86.Build.0 = Test|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|Any CPU.ActiveCfg = Debug 4.7.2|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|Any CPU.Build.0 = Debug 4.7.2|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|x64.Build.0 = Debug|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|x86.Build.0 = Debug|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|Any CPU.Build.0 = Release|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|x64.ActiveCfg = Release|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|x64.Build.0 = Release|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|x86.ActiveCfg = Release|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|x86.Build.0 = Release|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|Any CPU.ActiveCfg = Test|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|Any CPU.Build.0 = Test|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|x64.ActiveCfg = Test|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|x64.Build.0 = Test|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|x86.ActiveCfg = Test|Any CPU - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|x86.Build.0 = Test|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|x64.ActiveCfg = Debug|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|x64.Build.0 = Debug|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|x86.ActiveCfg = Debug|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|x86.Build.0 = Debug|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|Any CPU.Build.0 = Release|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|x64.ActiveCfg = Release|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|x64.Build.0 = Release|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|x86.ActiveCfg = Release|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|x86.Build.0 = Release|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|Any CPU.ActiveCfg = Test|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|Any CPU.Build.0 = Test|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|x64.ActiveCfg = Test|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|x64.Build.0 = Test|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|x86.ActiveCfg = Test|Any CPU - {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|x86.Build.0 = Test|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|x64.ActiveCfg = Debug|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|x64.Build.0 = Debug|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|x86.ActiveCfg = Debug|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|x86.Build.0 = Debug|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Release|Any CPU.Build.0 = Release|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Release|x64.ActiveCfg = Release|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Release|x64.Build.0 = Release|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Release|x86.ActiveCfg = Release|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Release|x86.Build.0 = Release|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Test|Any CPU.ActiveCfg = Test|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Test|Any CPU.Build.0 = Test|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Test|x64.ActiveCfg = Test|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Test|x64.Build.0 = Test|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Test|x86.ActiveCfg = Test|Any CPU - {B438694F-8FF7-464A-9EC8-10427374471F}.Test|x86.Build.0 = Test|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|x64.ActiveCfg = Debug|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|x64.Build.0 = Debug|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|x86.ActiveCfg = Debug|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|x86.Build.0 = Debug|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|Any CPU.Build.0 = Release|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|x64.ActiveCfg = Release|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|x64.Build.0 = Release|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|x86.ActiveCfg = Release|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|x86.Build.0 = Release|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|Any CPU.ActiveCfg = Test|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|Any CPU.Build.0 = Test|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|x64.ActiveCfg = Test|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|x64.Build.0 = Test|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|x86.ActiveCfg = Test|Any CPU - {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|x86.Build.0 = Test|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|x64.ActiveCfg = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|x64.Build.0 = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|x86.ActiveCfg = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|x86.Build.0 = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|x64.ActiveCfg = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|x64.Build.0 = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|x86.ActiveCfg = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|x86.Build.0 = Debug|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|Any CPU.Build.0 = Release|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|x64.ActiveCfg = Release|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|x64.Build.0 = Release|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|x86.ActiveCfg = Release|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|x86.Build.0 = Release|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|Any CPU.ActiveCfg = Test|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|Any CPU.Build.0 = Test|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|x64.ActiveCfg = Test|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|x64.Build.0 = Test|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|x86.ActiveCfg = Test|Any CPU - {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|x86.Build.0 = Test|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|x64.ActiveCfg = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|x64.Build.0 = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|x86.ActiveCfg = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|x86.Build.0 = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|x64.ActiveCfg = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|x64.Build.0 = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|x86.ActiveCfg = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|x86.Build.0 = Debug|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|Any CPU.Build.0 = Release|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|x64.ActiveCfg = Release|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|x64.Build.0 = Release|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|x86.ActiveCfg = Release|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|x86.Build.0 = Release|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|Any CPU.ActiveCfg = Test|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|Any CPU.Build.0 = Test|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|x64.ActiveCfg = Test|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|x64.Build.0 = Test|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|x86.ActiveCfg = Test|Any CPU - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|x86.Build.0 = Test|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {53E204B7-97DD-441D-A96C-721DF014DF82} = {AD98B742-8D85-481C-A69D-D8D8ABED39EA} - {CB3B11BA-625C-4D35-B663-FDC5BE9A230E} = {AD98B742-8D85-481C-A69D-D8D8ABED39EA} - {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B} = {AD98B742-8D85-481C-A69D-D8D8ABED39EA} - {F6D362DE-2256-44B1-927A-8CE4705D839A} = {B24989D7-32B5-48D5-9AE1-5F3B17D25206} - {B438694F-8FF7-464A-9EC8-10427374471F} = {B24989D7-32B5-48D5-9AE1-5F3B17D25206} - {E5336563-1194-501E-BC4A-79AD9283EF90} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {01191C7B-606D-4169-81B0-BC8BC1623CE9} = {0AB3BF05-4346-4AA6-1389-037BE0695223} - {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB} = {0AB3BF05-4346-4AA6-1389-037BE0695223} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {6907A4BF-7201-47CF-AAB1-3597F3B8E1C3} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33213.308 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PepperDash.Essentials.Devices.Common", "src\PepperDash.Essentials.Devices.Common\PepperDash.Essentials.Devices.Common.csproj", "{53E204B7-97DD-441D-A96C-721DF014DF82}" + ProjectSection(ProjectDependencies) = postProject + {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PepperDash.Essentials", "src\PepperDash.Essentials\PepperDash.Essentials.csproj", "{CB3B11BA-625C-4D35-B663-FDC5BE9A230E}" + ProjectSection(ProjectDependencies) = postProject + {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PepperDash.Essentials.Core", "src\PepperDash.Essentials.Core\PepperDash.Essentials.Core.csproj", "{3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}" + ProjectSection(ProjectDependencies) = postProject + {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile Control", "Mobile Control", "{B24989D7-32B5-48D5-9AE1-5F3B17D25206}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash.Essentials.MobileControl", "src\PepperDash.Essentials.MobileControl\PepperDash.Essentials.MobileControl.csproj", "{F6D362DE-2256-44B1-927A-8CE4705D839A}" + ProjectSection(ProjectDependencies) = postProject + {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash.Essentials.MobileControl.Messengers", "src\PepperDash.Essentials.MobileControl.Messengers\PepperDash.Essentials.MobileControl.Messengers.csproj", "{B438694F-8FF7-464A-9EC8-10427374471F}" + ProjectSection(ProjectDependencies) = postProject + {E5336563-1194-501E-BC4A-79AD9283EF90} = {E5336563-1194-501E-BC4A-79AD9283EF90} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Essentials", "Essentials", "{AD98B742-8D85-481C-A69D-D8D8ABED39EA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash.Core", "src\PepperDash.Core\PepperDash.Core.csproj", "{E5336563-1194-501E-BC4A-79AD9283EF90}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrestronMock", "src\CrestronMock\CrestronMock.csproj", "{01191C7B-606D-4169-81B0-BC8BC1623CE9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EssentialsTests", "Tests\EssentialsTests\EssentialsTests.csproj", "{3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash.Essentials.Core.Tests", "src\tests\PepperDash.Essentials.Core.Tests\PepperDash.Essentials.Core.Tests.csproj", "{E86229FE-9400-4F7E-B4CB-C43637FEE6A6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug 4.7.2|Any CPU = Debug 4.7.2|Any CPU + Debug 4.7.2|x64 = Debug 4.7.2|x64 + Debug 4.7.2|x86 = Debug 4.7.2|x86 + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + Test|Any CPU = Test|Any CPU + Test|x64 = Test|x64 + Test|x86 = Test|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|Any CPU.ActiveCfg = Debug 4.7.2|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|Any CPU.Build.0 = Debug 4.7.2|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|Any CPU.Build.0 = Debug|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|x64.ActiveCfg = Debug|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|x64.Build.0 = Debug|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|x86.ActiveCfg = Debug|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Debug|x86.Build.0 = Debug|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|Any CPU.ActiveCfg = Release|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|Any CPU.Build.0 = Release|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|x64.ActiveCfg = Release|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|x64.Build.0 = Release|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|x86.ActiveCfg = Release|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Release|x86.Build.0 = Release|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|Any CPU.ActiveCfg = Test|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|Any CPU.Build.0 = Test|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|x64.ActiveCfg = Test|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|x64.Build.0 = Test|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|x86.ActiveCfg = Test|Any CPU + {53E204B7-97DD-441D-A96C-721DF014DF82}.Test|x86.Build.0 = Test|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|Any CPU.ActiveCfg = Debug 4.7.2|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|Any CPU.Build.0 = Debug 4.7.2|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|x64.ActiveCfg = Debug|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|x64.Build.0 = Debug|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|x86.ActiveCfg = Debug|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Debug|x86.Build.0 = Debug|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|Any CPU.Build.0 = Release|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|x64.ActiveCfg = Release|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|x64.Build.0 = Release|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|x86.ActiveCfg = Release|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Release|x86.Build.0 = Release|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|Any CPU.ActiveCfg = Test|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|Any CPU.Build.0 = Test|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|x64.ActiveCfg = Test|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|x64.Build.0 = Test|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|x86.ActiveCfg = Test|Any CPU + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E}.Test|x86.Build.0 = Test|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|Any CPU.ActiveCfg = Debug 4.7.2|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|Any CPU.Build.0 = Debug 4.7.2|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|x64.ActiveCfg = Debug|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|x64.Build.0 = Debug|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|x86.ActiveCfg = Debug|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Debug|x86.Build.0 = Debug|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|Any CPU.Build.0 = Release|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|x64.ActiveCfg = Release|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|x64.Build.0 = Release|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|x86.ActiveCfg = Release|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Release|x86.Build.0 = Release|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|Any CPU.ActiveCfg = Test|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|Any CPU.Build.0 = Test|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|x64.ActiveCfg = Test|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|x64.Build.0 = Test|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|x86.ActiveCfg = Test|Any CPU + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B}.Test|x86.Build.0 = Test|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|x64.ActiveCfg = Debug|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|x64.Build.0 = Debug|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|x86.ActiveCfg = Debug|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Debug|x86.Build.0 = Debug|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|Any CPU.Build.0 = Release|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|x64.ActiveCfg = Release|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|x64.Build.0 = Release|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|x86.ActiveCfg = Release|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Release|x86.Build.0 = Release|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|Any CPU.ActiveCfg = Test|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|Any CPU.Build.0 = Test|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|x64.ActiveCfg = Test|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|x64.Build.0 = Test|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|x86.ActiveCfg = Test|Any CPU + {F6D362DE-2256-44B1-927A-8CE4705D839A}.Test|x86.Build.0 = Test|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|x64.ActiveCfg = Debug|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|x64.Build.0 = Debug|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|x86.ActiveCfg = Debug|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Debug|x86.Build.0 = Debug|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Release|Any CPU.Build.0 = Release|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Release|x64.ActiveCfg = Release|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Release|x64.Build.0 = Release|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Release|x86.ActiveCfg = Release|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Release|x86.Build.0 = Release|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Test|Any CPU.ActiveCfg = Test|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Test|Any CPU.Build.0 = Test|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Test|x64.ActiveCfg = Test|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Test|x64.Build.0 = Test|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Test|x86.ActiveCfg = Test|Any CPU + {B438694F-8FF7-464A-9EC8-10427374471F}.Test|x86.Build.0 = Test|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|x64.ActiveCfg = Debug 4.7.2|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|x64.Build.0 = Debug 4.7.2|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|x86.ActiveCfg = Debug 4.7.2|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug 4.7.2|x86.Build.0 = Debug 4.7.2|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|x64.ActiveCfg = Debug|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|x64.Build.0 = Debug|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|x86.ActiveCfg = Debug|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Debug|x86.Build.0 = Debug|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|Any CPU.Build.0 = Release|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|x64.ActiveCfg = Release|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|x64.Build.0 = Release|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|x86.ActiveCfg = Release|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Release|x86.Build.0 = Release|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|Any CPU.ActiveCfg = Test|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|Any CPU.Build.0 = Test|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|x64.ActiveCfg = Test|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|x64.Build.0 = Test|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|x86.ActiveCfg = Test|Any CPU + {E5336563-1194-501E-BC4A-79AD9283EF90}.Test|x86.Build.0 = Test|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|x64.ActiveCfg = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|x64.Build.0 = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|x86.ActiveCfg = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug 4.7.2|x86.Build.0 = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|x64.ActiveCfg = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|x64.Build.0 = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|x86.ActiveCfg = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Debug|x86.Build.0 = Debug|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|Any CPU.Build.0 = Release|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|x64.ActiveCfg = Release|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|x64.Build.0 = Release|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|x86.ActiveCfg = Release|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Release|x86.Build.0 = Release|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|Any CPU.ActiveCfg = Test|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|Any CPU.Build.0 = Test|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|x64.ActiveCfg = Test|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|x64.Build.0 = Test|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|x86.ActiveCfg = Test|Any CPU + {01191C7B-606D-4169-81B0-BC8BC1623CE9}.Test|x86.Build.0 = Test|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|x64.ActiveCfg = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|x64.Build.0 = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|x86.ActiveCfg = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug 4.7.2|x86.Build.0 = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|x64.ActiveCfg = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|x64.Build.0 = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|x86.ActiveCfg = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Debug|x86.Build.0 = Debug|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|Any CPU.Build.0 = Release|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|x64.ActiveCfg = Release|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|x64.Build.0 = Release|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|x86.ActiveCfg = Release|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Release|x86.Build.0 = Release|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|Any CPU.ActiveCfg = Test|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|Any CPU.Build.0 = Test|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|x64.ActiveCfg = Test|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|x64.Build.0 = Test|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|x86.ActiveCfg = Test|Any CPU + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB}.Test|x86.Build.0 = Test|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug 4.7.2|Any CPU.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug 4.7.2|Any CPU.Build.0 = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug 4.7.2|x64.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug 4.7.2|x64.Build.0 = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug 4.7.2|x86.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug 4.7.2|x86.Build.0 = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug|x64.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug|x64.Build.0 = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug|x86.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Debug|x86.Build.0 = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Release|Any CPU.Build.0 = Release|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Release|x64.ActiveCfg = Release|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Release|x64.Build.0 = Release|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Release|x86.ActiveCfg = Release|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Release|x86.Build.0 = Release|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Test|Any CPU.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Test|Any CPU.Build.0 = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Test|x64.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Test|x64.Build.0 = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Test|x86.ActiveCfg = Debug|Any CPU + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6}.Test|x86.Build.0 = Debug|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {53E204B7-97DD-441D-A96C-721DF014DF82} = {AD98B742-8D85-481C-A69D-D8D8ABED39EA} + {CB3B11BA-625C-4D35-B663-FDC5BE9A230E} = {AD98B742-8D85-481C-A69D-D8D8ABED39EA} + {3D192FED-8FFC-4CB5-B5F7-BA307ABA254B} = {AD98B742-8D85-481C-A69D-D8D8ABED39EA} + {F6D362DE-2256-44B1-927A-8CE4705D839A} = {B24989D7-32B5-48D5-9AE1-5F3B17D25206} + {B438694F-8FF7-464A-9EC8-10427374471F} = {B24989D7-32B5-48D5-9AE1-5F3B17D25206} + {E5336563-1194-501E-BC4A-79AD9283EF90} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {01191C7B-606D-4169-81B0-BC8BC1623CE9} = {0AB3BF05-4346-4AA6-1389-037BE0695223} + {3EEC6E2D-ED96-4929-8BBB-C73BE499A4EB} = {0AB3BF05-4346-4AA6-1389-037BE0695223} + {E86229FE-9400-4F7E-B4CB-C43637FEE6A6} = {0AB3BF05-4346-4AA6-1389-037BE0695223} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6907A4BF-7201-47CF-AAB1-3597F3B8E1C3} + EndGlobalSection +EndGlobal diff --git a/src/CrestronMock/Console.cs b/src/CrestronMock/Console.cs new file mode 100644 index 00000000..e9428c88 --- /dev/null +++ b/src/CrestronMock/Console.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Crestron.SimplSharp +{ + public static class ErrorLog + { + public static void Error(string message, params object[] args) + { + Console.WriteLine($"[ERROR] {string.Format(message, args)}"); + } + + public static void Notice(string message, params object[] args) + { + Console.WriteLine($"[NOTICE] {string.Format(message, args)}"); + } + + public static void Warn(string message, params object[] args) + { + Console.WriteLine($"[WARN] {string.Format(message, args)}"); + } + + public static void Info(string message, params object[] args) + { + Console.WriteLine($"[INFO] {string.Format(message, args)}"); + } + } +} + +namespace Crestron.SimplSharp.CrestronDataStore +{ + public static class CrestronDataStoreStatic + { + public static CDS_ERROR SetLocalStringValue(string key, string value) + { + return CDS_ERROR.CDS_SUCCESS; + } + + public static CDS_ERROR GetLocalStringValue(string key, out string value) + { + value = ""; + return CDS_ERROR.CDS_SUCCESS; + } + } + + public enum CDS_ERROR + { + CDS_SUCCESS = 0, + CDS_ERROR = -1 + } +} diff --git a/src/CrestronMock/CrestronEnvironment.cs b/src/CrestronMock/CrestronEnvironment.cs new file mode 100644 index 00000000..0ebae258 --- /dev/null +++ b/src/CrestronMock/CrestronEnvironment.cs @@ -0,0 +1,248 @@ +using System; + +namespace Crestron.SimplSharp +{ + // Console and logging types needed by CrestronConsole and CrestronLogger + public delegate string ConsoleCommandFunction(string parameters); + + public enum ConsoleAccessLevelEnum + { + AccessOperator = 0, + AccessProgrammer = 1, + AccessAdministrator = 2 + } + + public class ConsoleCommandParameterSpecClass + { + // Mock implementation + } + + /// Mock CrestronEnvironment for system event handling + public static class CrestronEnvironment + { + /// Event fired when program status changes + public static event Action? ProgramStatusEventHandler; + + /// Event fired when ethernet status changes + public static event Action? EthernetEventHandler; + + /// Gets the device platform + public static string DevicePlatform => "Mock"; + + /// Gets the runtime environment + public static string RuntimeEnvironment => "Test"; + + /// Triggers a program status event (for testing) + /// Event type + public static void TriggerProgramStatusEvent(eProgramStatusEventType eventType) + { + ProgramStatusEventHandler?.Invoke(eventType); + } + + /// Triggers an ethernet event (for testing) + /// Event arguments + public static void TriggerEthernetEvent(EthernetEventArgs args) + { + EthernetEventHandler?.Invoke(args); + } + } + + /// Mock ethernet event type enumeration + public enum eEthernetEventType + { + /// Link down + LinkDown = 0, + /// Link up + LinkUp = 1 + } + + /// Mock CrestronConsole for console output + public static class CrestronConsole + { + /// Prints a line to the console + /// Message to print + public static void PrintLine(string message) + { + // Mock implementation - could write to System.Console in test environment + Console.WriteLine($"[CrestronConsole] {message}"); + } + + /// Prints formatted text to the console + /// Format string + /// Arguments + public static void PrintLine(string format, params object[] args) + { + Console.WriteLine($"[CrestronConsole] {string.Format(format, args)}"); + } + + /// Prints text to the console without a newline + /// Message to print + public static void Print(string message) + { + Console.Write($"[CrestronConsole] {message}"); + } + + /// Console command response + /// Command to execute + /// Response string + public static string ConsoleCommandResponse(string command) + { + return $"Mock response for command: {command}"; + } + + /// Add new console command + /// Command function + /// Command name + /// Help text + /// Access level + /// 0 for success + public static int AddNewConsoleCommand(ConsoleCommandFunction function, string command, string help, ConsoleAccessLevelEnum accessLevel) + { + return 0; // Mock success + } + + /// Add new console command with parameter spec + /// Command function + /// Command name + /// Help text + /// Access level + /// Parameter specification + /// 0 for success + public static int AddNewConsoleCommand(ConsoleCommandFunction function, string command, string help, ConsoleAccessLevelEnum accessLevel, ConsoleCommandParameterSpecClass spec) + { + return 0; // Mock success + } + + /// Send control system command + /// Command to send + /// Program number + public static void SendControlSystemCommand(string command, uint programNumber) + { + // Mock implementation + } + } +} + +namespace Crestron.SimplSharp.CrestronIO +{ + /// Mock File class for basic file operations + public static class File + { + /// Checks if a file exists + /// File path + /// True if file exists + public static bool Exists(string path) + { + // Mock implementation - use System.IO.File for actual file operations + return System.IO.File.Exists(path); + } + + /// Reads all text from a file + /// File path + /// File contents + public static string ReadToEnd(string path) + { + return System.IO.File.ReadAllText(path); + } + + /// Reads all text from a file with specified encoding + /// File path + /// Text encoding + /// File contents + public static string ReadToEnd(string path, System.Text.Encoding encoding) + { + return System.IO.File.ReadAllText(path, encoding); + } + + /// Writes text to a file + /// File path + /// Contents to write + public static void WriteAllText(string path, string contents) + { + System.IO.File.WriteAllText(path, contents); + } + + /// Deletes a file + /// File path + public static void Delete(string path) + { + if (System.IO.File.Exists(path)) + System.IO.File.Delete(path); + } + } + + /// Mock Directory class for basic directory operations + public static class Directory + { + /// Gets the application directory path + /// Application directory path + public static string GetApplicationDirectory() + { + // Mock implementation - return current directory or a typical Crestron path + return System.IO.Directory.GetCurrentDirectory(); + } + + /// Gets the application root directory path + /// Application root directory path + public static string GetApplicationRootDirectory() + { + // Mock implementation - return current directory or a typical Crestron path + return System.IO.Directory.GetCurrentDirectory(); + } + + /// Checks if a directory exists + /// Directory path + /// True if directory exists + public static bool Exists(string path) + { + return System.IO.Directory.Exists(path); + } + + /// Creates a directory + /// Directory path + public static void CreateDirectory(string path) + { + System.IO.Directory.CreateDirectory(path); + } + } + + /// Mock Path class for path operations + public static class Path + { + /// Directory separator character + public static readonly char DirectorySeparatorChar = System.IO.Path.DirectorySeparatorChar; + + /// Combines path strings + /// First path + /// Second path + /// Combined path + public static string Combine(string path1, string path2) + { + return System.IO.Path.Combine(path1, path2); + } + + /// Gets the file name from a path + /// Full path + /// File name + public static string GetFileName(string path) + { + return System.IO.Path.GetFileName(path); + } + + /// Gets the directory name from a path + /// Full path + /// Directory name + public static string GetDirectoryName(string path) + { + return System.IO.Path.GetDirectoryName(path) ?? string.Empty; + } + + /// Gets the file extension from a path + /// Full path + /// File extension + public static string GetExtension(string path) + { + return System.IO.Path.GetExtension(path); + } + } +} diff --git a/src/CrestronMock/CrestronLogger.cs b/src/CrestronMock/CrestronLogger.cs new file mode 100644 index 00000000..aabdfbde --- /dev/null +++ b/src/CrestronMock/CrestronLogger.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; + +namespace Crestron.SimplSharp.CrestronLogger +{ + /// Mock CrestronLogger for .NET 8 compatibility + public static class CrestronLogger + { + /// Write to log + /// Log name + /// Message + /// Logger mode + public static void WriteToLog(string logName, string message, LoggerModeEnum mode) + { + Console.WriteLine($"[{logName}] {message}"); + } + + /// Write to log with level + /// Message + /// Log level + public static void WriteToLog(string message, uint level) + { + Console.WriteLine($"[Level {level}] {message}"); + } + + /// Initialize logger + /// Buffer size + /// Logger mode + public static void Initialize(int bufferSize, LoggerModeEnum mode) + { + // Mock implementation + } + + /// Print the log + /// Include all log entries + /// Log entries as string list + public static List PrintTheLog(bool includeAll = false) + { + return new List { "Mock log entry" }; + } + + /// Clear the log + /// Clear all entries + /// Success message + public static string Clear(bool clearAll) + { + return "Log cleared (mock)"; + } + } + + /// Logger mode enumeration + public enum LoggerModeEnum + { + /// Append mode + LoggingModeAppend = 0, + /// Overwrite mode + LoggingModeOverwrite = 1, + /// RM mode + RM = 2 + } +} diff --git a/src/CrestronMock/EventTypes.cs b/src/CrestronMock/EventTypes.cs index 74d0888f..c9578b48 100644 --- a/src/CrestronMock/EventTypes.cs +++ b/src/CrestronMock/EventTypes.cs @@ -30,6 +30,9 @@ namespace Crestron.SimplSharp /// Gets whether it's full duplex public bool FullDuplex { get; private set; } + /// Gets the ethernet event type + public eEthernetEventType EthernetEventType { get; private set; } + /// Initializes a new instance of EthernetEventArgs /// Ethernet adapter number /// Link status @@ -41,6 +44,7 @@ namespace Crestron.SimplSharp LinkUp = linkUp; Speed = speed; FullDuplex = fullDuplex; + EthernetEventType = linkUp ? eEthernetEventType.LinkUp : eEthernetEventType.LinkDown; } /// Default constructor diff --git a/src/CrestronMock/Extensions.cs b/src/CrestronMock/Extensions.cs new file mode 100644 index 00000000..0dd26467 --- /dev/null +++ b/src/CrestronMock/Extensions.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Crestron.SimplSharp +{ + public static class CrestronInvoke + { + public static void BeginInvoke(Func func, object? state = null) + { + Task.Run(func); + } + + public static void BeginInvoke(Action action) + { + Task.Run(action); + } + } + + public static class CrestronEthernetHelper + { + public static List GetEthernetAdaptersInfo() + { + return new List { "MockAdapter" }; + } + + public static string GetEthernetParameter(string adapter, string parameter) + { + return "MockValue"; + } + } +} + +namespace Crestron.SimplSharp.Net.Https +{ + public class UrlParser + { + public string Url { get; set; } + + public UrlParser(string url) + { + Url = url; + } + } + + public class HttpsHeader + { + public string Name { get; set; } + public string Value { get; set; } + + public HttpsHeader(string name, string value) + { + Name = name; + Value = value; + } + } + + public class HttpException : Exception + { + public HttpException(string message) : base(message) { } + public HttpException(string message, Exception innerException) : base(message, innerException) { } + } +} + +namespace System.Collections.Generic +{ + public static class DictionaryExtensions + { + public static void AddHeader(this Dictionary dictionary, Crestron.SimplSharp.Net.Https.HttpsHeader header) + { + dictionary[header.Name] = header.Value; + } + } +} diff --git a/src/CrestronMock/HttpCwsServer.cs b/src/CrestronMock/HttpCwsServer.cs index 80ade99d..f6ce3da4 100644 --- a/src/CrestronMock/HttpCwsServer.cs +++ b/src/CrestronMock/HttpCwsServer.cs @@ -5,7 +5,7 @@ using System.Net; using System.Text; using System.Threading.Tasks; -namespace Crestron.SimplSharp.CrestronWebSocketServer +namespace Crestron.SimplSharp.WebScripting { /// Mock HttpCwsServer class for HTTP web server functionality public class HttpCwsServer : IDisposable @@ -92,6 +92,13 @@ namespace Crestron.SimplSharp.CrestronWebSocketServer _routes.Remove(route.ToLowerInvariant()); } + /// Unregisters a route handler + /// Route path to unregister + public void Unregister(string route) + { + RemoveRoute(route); + } + private async Task ProcessRequestsAsync() { while (_listening && _httpListener != null) @@ -243,6 +250,13 @@ namespace Crestron.SimplSharp.CrestronWebSocketServer set => _response.StatusCode = value; } + /// Gets or sets the status description + public string StatusDescription + { + get => _response.StatusDescription; + set => _response.StatusDescription = value; + } + /// Gets or sets the content type public string? ContentType { @@ -287,6 +301,19 @@ namespace Crestron.SimplSharp.CrestronWebSocketServer { OutputStream.Write(buffer, offset, count); } + + /// Ends the response + public void End() + { + try + { + _response.Close(); + } + catch (Exception) + { + // Ignore exceptions during close + } + } } /// Interface for HTTP request handlers diff --git a/src/CrestronMock/SecureTCPClient.cs b/src/CrestronMock/SecureTCPClient.cs new file mode 100644 index 00000000..ff83f2ee --- /dev/null +++ b/src/CrestronMock/SecureTCPClient.cs @@ -0,0 +1,31 @@ +using System; + +namespace Crestron.SimplSharp.CrestronSockets +{ + /// Mock implementation of Crestron SecureTCPClient for testing purposes + public class SecureTCPClient : TCPClient + { + /// Initializes a new instance of the SecureTCPClient class + /// IP address to connect to + /// Port number to connect to + /// Size of the receive buffer + public SecureTCPClient(string addressToConnectTo, int portNumber, int bufferSize) + : base(addressToConnectTo, portNumber, bufferSize) + { + } + + /// Gets or sets whether to verify the host certificate + public bool HostVerification { get; set; } = true; + + /// Gets or sets whether to verify the peer certificate + public bool PeerVerification { get; set; } = true; + + /// Resets the client connection + /// Connection flag + public void Reset(int connectionFlag) + { + // Mock implementation + DisconnectFromServer(); + } + } +} diff --git a/src/CrestronMock/SystemTypes.cs b/src/CrestronMock/SystemTypes.cs new file mode 100644 index 00000000..bc9bc3ae --- /dev/null +++ b/src/CrestronMock/SystemTypes.cs @@ -0,0 +1,35 @@ +using System; + +namespace Crestron.SimplSharp +{ + public class InitialParametersClass + { + public static string ApplicationDirectory { get; set; } = "/User/"; + public static string ProgramIDTag { get; set; } = "MockProgram"; + public static string ApplicationName { get; set; } = "MockApplication"; + public static string FirmwareVersion { get; set; } = "1.0.0.0"; + public static uint ProgramNumber { get; set; } = 1; + public static eDevicePlatform DevicePlatform { get; set; } = eDevicePlatform.Appliance; + public static eCrestronSeries ControllerSeries { get; set; } = eCrestronSeries.FourSeries; + } + + public enum eDevicePlatform + { + Appliance = 0, + Server = 1, + ControlSystem = 2 + } + + public enum eCrestronSeries + { + TwoSeries = 2, + ThreeSeries = 3, + FourSeries = 4 + } + + public enum eRuntimeEnvironment + { + SimplSharpPro = 0, + SimplSharp = 1 + } +} diff --git a/src/CrestronMock/TCPClient.cs b/src/CrestronMock/TCPClient.cs index c68df37a..451af0be 100644 --- a/src/CrestronMock/TCPClient.cs +++ b/src/CrestronMock/TCPClient.cs @@ -39,6 +39,10 @@ namespace Crestron.SimplSharp.CrestronSockets /// The socket status public delegate void TCPClientSocketStatusChangeEventHandler(TCPClient client, SocketStatus clientSocketStatus); + /// Delegate for TCP client connect callback + /// TCP client instance + public delegate void TCPClientConnectCallback(TCPClient client); + /// Mock event handler for receiving TCP client data /// The TCP client /// Number of bytes received @@ -89,6 +93,19 @@ namespace Crestron.SimplSharp.CrestronSockets /// Gets the number of bytes available to read public int BytesAvailable => IncomingDataBufferSize; + /// Gets or sets the socket send or receive timeout in milliseconds + public int SocketSendOrReceiveTimeOutInMs + { + get => SocketSendTimeout; + set => SocketSendTimeout = SocketReceiveTimeout = value; + } + + /// Gets the address the client is connected to + public string AddressClientConnectedTo { get; private set; } = string.Empty; + + /// Gets the incoming data buffer + public byte[] IncomingDataBuffer { get; private set; } = new byte[0]; + #endregion #region Constructor @@ -139,10 +156,21 @@ namespace Crestron.SimplSharp.CrestronSockets // Mock connection - simulate successful connection ClientStatus = SocketStatus.SOCKET_STATUS_CONNECTED; + AddressClientConnectedTo = AddressToConnectTo; SocketStatusChange?.Invoke(this, ClientStatus); return ClientStatus; } + /// Connects to the remote endpoint asynchronously with callback + /// Callback to invoke when connection completes + /// Status of the connection attempt + public SocketStatus ConnectToServerAsync(TCPClientConnectCallback callback) + { + var status = ConnectToServerAsync(); + callback?.Invoke(this); + return status; + } + /// Connects to the remote endpoint /// Status of the connection attempt public SocketStatus ConnectToServer() @@ -214,6 +242,26 @@ namespace Crestron.SimplSharp.CrestronSockets return string.Empty; } + /// Sends data to the connected server asynchronously + /// Data to send as byte array + /// Number of bytes to send + /// Number of bytes sent, or -1 on error + public int SendDataAsync(byte[] dataToSend, int lengthToSend) + { + return SendData(dataToSend, lengthToSend); + } + + /// Receives data from the server asynchronously + /// Number of bytes received, or -1 on error + public int ReceiveDataAsync() + { + if (_disposed) return -1; + if (ClientStatus != SocketStatus.SOCKET_STATUS_CONNECTED) return -1; + + // Mock receive - simulate no data available + return 0; + } + /// Simulates receiving data (for testing purposes) /// Data to simulate receiving public void SimulateDataReceived(string data) diff --git a/src/CrestronMock/TCPServer.cs b/src/CrestronMock/TCPServer.cs index e5039df6..7d846ceb 100644 --- a/src/CrestronMock/TCPServer.cs +++ b/src/CrestronMock/TCPServer.cs @@ -197,6 +197,71 @@ namespace Crestron.SimplSharp.CrestronSockets } } + /// Gets the socket status for a specific client + /// Index of client + /// Socket status + public SocketStatus GetServerSocketStatusForSpecificClient(uint clientIndex) + { + lock (_lockObject) + { + if (clientIndex >= _clients.Count) + return SocketStatus.SOCKET_STATUS_NOT_CONNECTED; + + return _clients[(int)clientIndex].IsConnected ? + SocketStatus.SOCKET_STATUS_CONNECTED : + SocketStatus.SOCKET_STATUS_NOT_CONNECTED; + } + } + + /// Gets the port number the server accepted connection from for a specific client + /// Index of client + /// Port number + public int GetPortNumberServerAcceptedConnectionFromForSpecificClient(uint clientIndex) + { + lock (_lockObject) + { + if (clientIndex >= _clients.Count) + return 0; + + return _clients[(int)clientIndex].ClientPort; + } + } + + /// Gets the local address the server accepted connection from for a specific client + /// Index of client + /// Local address + public string GetLocalAddressServerAcceptedConnectionFromForSpecificClient(uint clientIndex) + { + return "127.0.0.1"; // Mock local address + } + + /// Gets the incoming data buffer for a specific client + /// Index of client + /// Incoming data buffer + public byte[] GetIncomingDataBufferForSpecificClient(uint clientIndex) + { + return new byte[0]; // Mock empty buffer + } + + /// Sends data to a specific client asynchronously + /// Data to send + /// Length of data to send + /// Index of client + /// SocketErrorCodes indicating success or failure + public SocketErrorCodes SendDataAsync(byte[] data, int dataLength, uint clientIndex) + { + return SendData(data, dataLength, clientIndex); + } + + /// Receives data from a specific client asynchronously + /// Index of client + /// SocketErrorCodes indicating success or failure + public SocketErrorCodes ReceiveDataAsync(uint clientIndex) + { + // Mock implementation - no data to receive + return SocketErrorCodes.SOCKET_OK; + } + private async Task AcceptClientsAsync() { while (_listening && _listener != null) @@ -301,6 +366,8 @@ namespace Crestron.SimplSharp.CrestronSockets public uint ClientIndex { get; } public string ClientIPAddress { get; } + public bool IsConnected => _connected; + public int ClientPort { get; } public event EventHandler? DataReceived; public event EventHandler? Disconnected; @@ -313,6 +380,7 @@ namespace Crestron.SimplSharp.CrestronSockets var endpoint = tcpClient.Client.RemoteEndPoint as IPEndPoint; ClientIPAddress = endpoint?.Address.ToString() ?? "Unknown"; + ClientPort = endpoint?.Port ?? 0; _ = Task.Run(ReceiveDataAsync); } diff --git a/src/CrestronMock/WebAndNetworking.cs b/src/CrestronMock/WebAndNetworking.cs index 6c25a303..d105315b 100644 --- a/src/CrestronMock/WebAndNetworking.cs +++ b/src/CrestronMock/WebAndNetworking.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; -using Crestron.SimplSharp.CrestronWebSocketServer; +using Crestron.SimplSharp.WebScripting; -namespace Crestron.SimplSharp.Net +namespace Crestron.SimplSharp.Net.Http { /// HTTP request types public enum RequestType @@ -23,40 +23,17 @@ namespace Crestron.SimplSharp.Net Patch = 6 } - /// Mock Http namespace for Crestron HTTP client functionality - public static class Http + /// Mock HTTP client + public static class HttpClient { - /// HTTP request types - public enum RequestType + /// Dispatch HTTP request + /// HTTP request + /// Callback for response + public static void Dispatch(HttpClientRequest request, Action callback) { - /// GET request - Get = 0, - /// POST request - Post = 1, - /// PUT request - Put = 2, - /// DELETE request - Delete = 3, - /// HEAD request - Head = 4, - /// OPTIONS request - Options = 5, - /// PATCH request - Patch = 6 - } - - /// Mock HTTP client - public static class HttpClient - { - /// Dispatch HTTP request - /// HTTP request - /// Callback for response - public static void Dispatch(HttpClientRequest request, Action callback) - { - // Mock implementation - invoke callback with empty response - var response = new HttpClientResponse(); - callback?.Invoke(response); - } + // Mock implementation - invoke callback with empty response + var response = new HttpClientResponse(); + callback?.Invoke(response); } } @@ -91,41 +68,40 @@ namespace Crestron.SimplSharp.Net /// Gets the headers collection public Dictionary Header { get; } = new Dictionary(); } +} - /// Mock HTTPS namespace - public static class Https +namespace Crestron.SimplSharp.Net.Https +{ + /// HTTPS request types + public enum RequestType { - /// HTTPS request types - public enum RequestType - { - /// GET request - Get = 0, - /// POST request - Post = 1, - /// PUT request - Put = 2, - /// DELETE request - Delete = 3, - /// HEAD request - Head = 4, - /// OPTIONS request - Options = 5, - /// PATCH request - Patch = 6 - } + /// GET request + Get = 0, + /// POST request + Post = 1, + /// PUT request + Put = 2, + /// DELETE request + Delete = 3, + /// HEAD request + Head = 4, + /// OPTIONS request + Options = 5, + /// PATCH request + Patch = 6 + } - /// Mock HTTPS client - public static class HttpsClient + /// Mock HTTPS client + public static class HttpsClient + { + /// Dispatch HTTPS request + /// HTTPS request + /// Callback for response + public static void Dispatch(HttpsClientRequest request, Action callback) { - /// Dispatch HTTPS request - /// HTTPS request - /// Callback for response - public static void Dispatch(HttpsClientRequest request, Action callback) - { - // Mock implementation - invoke callback with empty response - var response = new HttpsClientResponse(); - callback?.Invoke(response); - } + // Mock implementation - invoke callback with empty response + var response = new HttpsClientResponse(); + callback?.Invoke(response); } } @@ -162,83 +138,6 @@ namespace Crestron.SimplSharp.Net } } -namespace Crestron.SimplSharp.WebScripting -{ - /// Mock HTTP CWS route collection - public class HttpCwsRouteCollection - { - private readonly List _routes = new List(); - - /// Adds a route - /// Route to add - public void Add(HttpCwsRoute route) - { - _routes.Add(route); - } - - /// Removes a route - /// Route to remove - public void Remove(HttpCwsRoute route) - { - _routes.Remove(route); - } - - /// Clears all routes - public void Clear() - { - _routes.Clear(); - } - - /// Gets route count - public int Count => _routes.Count; - } -} - -namespace Crestron.SimplSharp.CrestronLogger -{ - /// Mock Crestron logger - public static class CrestronLogger - { - /// Mock log levels - public enum LogLevel - { - /// Debug level - Debug = 0, - /// Info level - Info = 1, - /// Warning level - Warning = 2, - /// Error level - Error = 3 - } - - /// Mock logger interface - public interface ILogger - { - /// Logs a message - /// Log level - /// Message to log - void Log(LogLevel level, string message); - } - - /// Gets a logger by name - /// Logger name - /// Mock logger instance - public static ILogger GetLogger(string name) - { - return new MockLogger(); - } - - private class MockLogger : ILogger - { - public void Log(LogLevel level, string message) - { - // Mock implementation - do nothing in test environment - } - } - } -} - namespace Crestron.SimplSharp.CrestronDataStore { /// Mock Crestron data store @@ -280,4 +179,141 @@ namespace Crestron.SimplSharp.CrestronDataStore } } } + + /// Mock HTTPS client request for data store namespace + public class HttpsClientRequest + { + /// Gets or sets the request URL + public string Url { get; set; } = string.Empty; + + /// Gets or sets the HTTP method + public string Method { get; set; } = "GET"; + + /// Gets or sets the request headers + public HttpsHeaderCollection Headers { get; set; } + + /// Gets or sets the request content + public string Content { get; set; } = string.Empty; + + /// Initializes a new instance of HttpsClientRequest + public HttpsClientRequest() + { + Headers = new HttpsHeaderCollection(); + } + } + + /// Mock HTTPS client response for data store namespace + public class HttpsClientResponse + { + /// Gets or sets the response status code + public int StatusCode { get; set; } = 200; + + /// Gets or sets the response content + public string Content { get; set; } = string.Empty; + + /// Gets or sets the response headers + public HttpsHeaderCollection Headers { get; set; } + + /// Initializes a new instance of HttpsClientResponse + public HttpsClientResponse() + { + Headers = new HttpsHeaderCollection(); + } + } + + /// Mock HTTPS header + public class HttpsHeader + { + /// Gets the header name + public string Name { get; private set; } + + /// Gets the header value + public string Value { get; private set; } + + /// Initializes a new instance of HttpsHeader + /// Header name + /// Header value + public HttpsHeader(string name, string value) + { + Name = name; + Value = value; + } + } + + /// Mock HTTPS header collection + public class HttpsHeaderCollection + { + private readonly List _headers = new List(); + + /// Adds a header to the collection + /// Header to add + public void AddHeader(HttpsHeader header) + { + _headers.Add(header); + } + + /// Gets all headers + /// Array of headers + public HttpsHeader[] GetHeaders() + { + return _headers.ToArray(); + } + } + + /// Mock HTTPS client for data store namespace + public class HttpsClient + { + /// Dispatch HTTPS request + /// HTTPS request + /// Callback for response + public void Dispatch(HttpsClientRequest request, Action callback) + { + // Mock implementation - invoke callback with empty response + var response = new HttpsClientResponse(); + callback?.Invoke(response); + } + } + + /// Mock URL parser + public class UrlParser + { + /// Gets the parsed URL + public string Url { get; private set; } + + /// Initializes a new instance of UrlParser + /// URL to parse + public UrlParser(string url) + { + Url = url; + } + + /// Implicit conversion to string + /// URL parser + public static implicit operator string(UrlParser parser) + { + return parser.Url; + } + } + + /// Mock HTTP exception + public class HttpException : Exception + { + /// Initializes a new instance of HttpException + public HttpException() : base() + { + } + + /// Initializes a new instance of HttpException + /// Exception message + public HttpException(string message) : base(message) + { + } + + /// Initializes a new instance of HttpException + /// Exception message + /// Inner exception + public HttpException(string message, Exception innerException) : base(message, innerException) + { + } + } } diff --git a/src/CrestronMock/WebAndNetworking_New.cs b/src/CrestronMock/WebAndNetworking_New.cs new file mode 100644 index 00000000..922d3a5d --- /dev/null +++ b/src/CrestronMock/WebAndNetworking_New.cs @@ -0,0 +1,364 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp.WebScripting; + +namespace Crestron.SimplSharp.Net.Http +{ + /// HTTP request types + public enum RequestType + { + /// GET request + Get = 0, + /// POST request + Post = 1, + /// PUT request + Put = 2, + /// DELETE request + Delete = 3, + /// HEAD request + Head = 4, + /// OPTIONS request + Options = 5, + /// PATCH request + Patch = 6 + } + + /// Mock HTTP client + public static class HttpClient + { + /// Dispatch HTTP request + /// HTTP request + /// Callback for response + public static void Dispatch(HttpClientRequest request, Action callback) + { + // Mock implementation - invoke callback with empty response + var response = new HttpClientResponse(); + callback?.Invoke(response); + } + } + + /// Mock HTTP client request + public class HttpClientRequest + { + /// Gets or sets the URL + public string Url { get; set; } = string.Empty; + + /// Gets or sets the HTTP method + public string RequestType { get; set; } = "GET"; + + /// Gets or sets the content data + public string ContentString { get; set; } = string.Empty; + + /// Gets the headers collection + public Dictionary Header { get; } = new Dictionary(); + } + + /// Mock HTTP client response + public class HttpClientResponse + { + /// Gets the response code + public int Code { get; set; } = 200; + + /// Gets the response content + public string ContentString { get; set; } = string.Empty; + + /// Gets the response data as bytes + public byte[] ContentBytes { get; set; } = Array.Empty(); + + /// Gets the headers collection + public Dictionary Header { get; } = new Dictionary(); + } +} + +namespace Crestron.SimplSharp.Net.Https +{ + /// HTTPS request types + public enum RequestType + { + /// GET request + Get = 0, + /// POST request + Post = 1, + /// PUT request + Put = 2, + /// DELETE request + Delete = 3, + /// HEAD request + Head = 4, + /// OPTIONS request + Options = 5, + /// PATCH request + Patch = 6 + } + + /// Mock HTTPS client + public static class HttpsClient + { + /// Dispatch HTTPS request + /// HTTPS request + /// Callback for response + public static void Dispatch(HttpsClientRequest request, Action callback) + { + // Mock implementation - invoke callback with empty response + var response = new HttpsClientResponse(); + callback?.Invoke(response); + } + } + + /// Mock HTTPS client request + public class HttpsClientRequest + { + /// Gets or sets the URL + public string Url { get; set; } = string.Empty; + + /// Gets or sets the HTTP method + public string RequestType { get; set; } = "GET"; + + /// Gets or sets the content data + public string ContentString { get; set; } = string.Empty; + + /// Gets the headers collection + public Dictionary Header { get; } = new Dictionary(); + } + + /// Mock HTTPS client response + public class HttpsClientResponse + { + /// Gets the response code + public int Code { get; set; } = 200; + + /// Gets the response content + public string ContentString { get; set; } = string.Empty; + + /// Gets the response data as bytes + public byte[] ContentBytes { get; set; } = Array.Empty(); + + /// Gets the headers collection + public Dictionary Header { get; } = new Dictionary(); + } +} + +namespace Crestron.SimplSharp.CrestronLogger +{ + /// Mock Crestron logger + public static class CrestronLogger + { + /// Mock log levels + public enum LogLevel + { + /// Debug level + Debug = 0, + /// Info level + Info = 1, + /// Warning level + Warning = 2, + /// Error level + Error = 3 + } + + /// Mock logger interface + public interface ILogger + { + /// Logs a message + /// Log level + /// Message to log + void Log(LogLevel level, string message); + } + + /// Gets a logger by name + /// Logger name + /// Mock logger instance + public static ILogger GetLogger(string name) + { + return new MockLogger(); + } + + private class MockLogger : ILogger + { + public void Log(LogLevel level, string message) + { + // Mock implementation - do nothing in test environment + } + } + } +} + +namespace Crestron.SimplSharp.CrestronDataStore +{ + /// Mock Crestron data store + public static class CrestronDataStore + { + /// Mock data store interface + public interface IDataStore + { + /// Sets a value + /// Key + /// Value + void SetValue(string key, string value); + + /// Gets a value + /// Key + /// Value or null if not found + string? GetValue(string key); + } + + /// Gets the global data store + /// Mock data store instance + public static IDataStore GetGlobalDataStore() + { + return new MockDataStore(); + } + + private class MockDataStore : IDataStore + { + private readonly Dictionary _data = new Dictionary(); + + public void SetValue(string key, string value) + { + _data[key] = value; + } + + public string? GetValue(string key) + { + return _data.TryGetValue(key, out var value) ? value : null; + } + } + } + + /// Mock HTTPS client request for data store namespace + public class HttpsClientRequest + { + /// Gets or sets the request URL + public string Url { get; set; } = string.Empty; + + /// Gets or sets the HTTP method + public string Method { get; set; } = "GET"; + + /// Gets or sets the request headers + public HttpsHeaderCollection Headers { get; set; } + + /// Gets or sets the request content + public string Content { get; set; } = string.Empty; + + /// Initializes a new instance of HttpsClientRequest + public HttpsClientRequest() + { + Headers = new HttpsHeaderCollection(); + } + } + + /// Mock HTTPS client response for data store namespace + public class HttpsClientResponse + { + /// Gets or sets the response status code + public int StatusCode { get; set; } = 200; + + /// Gets or sets the response content + public string Content { get; set; } = string.Empty; + + /// Gets or sets the response headers + public HttpsHeaderCollection Headers { get; set; } + + /// Initializes a new instance of HttpsClientResponse + public HttpsClientResponse() + { + Headers = new HttpsHeaderCollection(); + } + } + + /// Mock HTTPS header + public class HttpsHeader + { + /// Gets the header name + public string Name { get; private set; } + + /// Gets the header value + public string Value { get; private set; } + + /// Initializes a new instance of HttpsHeader + /// Header name + /// Header value + public HttpsHeader(string name, string value) + { + Name = name; + Value = value; + } + } + + /// Mock HTTPS header collection + public class HttpsHeaderCollection + { + private readonly List _headers = new List(); + + /// Adds a header to the collection + /// Header to add + public void AddHeader(HttpsHeader header) + { + _headers.Add(header); + } + + /// Gets all headers + /// Array of headers + public HttpsHeader[] GetHeaders() + { + return _headers.ToArray(); + } + } + + /// Mock HTTPS client for data store namespace + public class HttpsClient + { + /// Dispatch HTTPS request + /// HTTPS request + /// Callback for response + public void Dispatch(HttpsClientRequest request, Action callback) + { + // Mock implementation - invoke callback with empty response + var response = new HttpsClientResponse(); + callback?.Invoke(response); + } + } + + /// Mock URL parser + public class UrlParser + { + /// Gets the parsed URL + public string Url { get; private set; } + + /// Initializes a new instance of UrlParser + /// URL to parse + public UrlParser(string url) + { + Url = url; + } + + /// Implicit conversion to string + /// URL parser + public static implicit operator string(UrlParser parser) + { + return parser.Url; + } + } + + /// Mock HTTP exception + public class HttpException : Exception + { + /// Initializes a new instance of HttpException + public HttpException() : base() + { + } + + /// Initializes a new instance of HttpException + /// Exception message + public HttpException(string message) : base(message) + { + } + + /// Initializes a new instance of HttpException + /// Exception message + /// Inner exception + public HttpException(string message, Exception innerException) : base(message, innerException) + { + } + } +}