diff --git a/._Readme.md b/._Readme.md
deleted file mode 100644
index 4a7c548..0000000
Binary files a/._Readme.md and /dev/null differ
diff --git a/.github/workflows/EssentialsPlugins-builds-4-series-caller.yml b/.github/workflows/EssentialsPlugins-builds-4-series-caller.yml
new file mode 100644
index 0000000..36588bd
--- /dev/null
+++ b/.github/workflows/EssentialsPlugins-builds-4-series-caller.yml
@@ -0,0 +1,21 @@
+name: Build PepperDash Core
+
+on:
+ push:
+ branches:
+ - '**'
+
+jobs:
+ getVersion:
+ uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-getversion.yml@main
+ secrets: inherit
+ build-4Series:
+ uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-4Series-builds.yml@main
+ secrets: inherit
+ needs: getVersion
+ if: needs.getVersion.outputs.newVersion == 'true'
+ with:
+ newVersion: ${{ needs.getVersion.outputs.newVersion }}
+ version: ${{ needs.getVersion.outputs.version }}
+ tag: ${{ needs.getVersion.outputs.tag }}
+ channel: ${{ needs.getVersion.outputs.channel }}
\ No newline at end of file
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
deleted file mode 100644
index 9f10395..0000000
--- a/.github/workflows/docker.yml
+++ /dev/null
@@ -1,85 +0,0 @@
-name: Branch Build Using Docker
-
-on:
- push:
- branches:
- - feature-2/*
- - hotfix-2/*
- - release-2/*
- - development-2
-
-env:
- # solution path doesn't need slashes unless there it is multiple folders deep
- # solution name does not include extension. .sln is assumed
- SOLUTION_PATH: .
- SOLUTION_FILE: PepperDash Core
- # Do not edit this, we're just creating it here
- VERSION: 0.0.0-buildtype-buildnumber
- # Defaults to debug for build type
- BUILD_TYPE: Debug
- # Defaults to main as the release branch. Change as necessary
- RELEASE_BRANCH: main
-jobs:
- Build_Project_4-Series:
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v3
- # Fetch all tags
- - name: Fetch tags
- run: git fetch --tags
- # Generate the appropriate version number
- - name: Set Version Number
- id: setVersion
- shell: powershell
- run: |
- $latestVersion = [version]"2.0.0"
-
- $newVersion = [version]$latestVersion
- $phase = ""
- $newVersionString = ""
-
- switch -regex ($Env:GITHUB_REF) {
- '^refs\/pull\/*.' {
- $phase = 'beta';
- $newVersionString = "{0}-{1}-{2}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER
- }
- '^refs\/heads\/feature-2\/*.' {
- $phase = 'alpha'
- $newVersionString = "{0}-{1}-{2}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER
- }
- 'development-2' {
- $phase = 'beta'
- $newVersionString = "{0}-{1}-{2}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER
- }
- }
- echo "version=$newVersionString" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
- - name: Setup MS Build
- uses: microsoft/setup-msbuild@v1.1
- - name: restore Nuget Packages
- run: nuget restore .\$($Env:SOLUTION_FILE).sln
- # Build the solutions in the docker image
- - name: Build Solution
- run: msbuild .\$($Env:SOLUTION_FILE).sln /p:Platform="Any CPU" /p:Configuration="Debug" /p:Version="${{ steps.setVersion.outputs.version }}"
- - name: Create tag for non-rc builds
- if: contains(steps.setVersion.outputs.version, 'alpha')
- run: |
- git tag ${{ steps.setVersion.outputs.version }}
- git push --tags origin
- # Create the release on the source repo
- - name: Create Release
- id: create_release
- if: contains(steps.setVersion.outputs.version,'-rc-') ||
- contains(steps.setVersion.outputs.version,'-hotfix-') ||
- contains(steps.setVersion.outputs.version, 'beta')
- uses: ncipollo/release-action@v1
- with:
- artifacts: '**\*.clz'
- generateReleaseNotes: true
- prerelease: ${{contains('debug', env.BUILD_TYPE)}}
- tag: ${{ steps.setVersion.outputs.version }}
- - name: Publish to Nuget
- run: |
- nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }}
- nuget setApiKey ${{ secrets.NUGET_API_KEY }}
- nuget push ".\package\PepperDashCore.${{ steps.setVersion.outputs.version }}.nupkg" -Source github
- nuget push ".\package\PepperDashCore.${{ steps.setVersion.outputs.version }}.nupkg" -Source https://api.nuget.org/v3/index.json
\ No newline at end of file
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
deleted file mode 100644
index 25d211b..0000000
--- a/.github/workflows/main.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-name: Main Build using Docker
-
-on:
- release:
- types:
- - created
- branches:
- - main-2
-env:
- # solution path doesn't need slashes unless there it is multiple folders deep
- # solution name does not include extension. .sln is assumed
- SOLUTION_PATH: .
- SOLUTION_FILE: Pepperdash Core
- # Do not edit this, we're just creating it here
- VERSION: 0.0.0-buildtype-buildnumber
- # Defaults to debug for build type
- BUILD_TYPE: Release
- # Defaults to main as the release branch. Change as necessary
- RELEASE_BRANCH: main
-jobs:
- Build_Project_4-Series:
- runs-on: windows-latest
- steps:
- # First we checkout the source repo
- - name: Checkout repo
- uses: actions/checkout@v3
- # Generate the appropriate version number
- - name: Set Version Number
- shell: powershell
- env:
- TAG_NAME: ${{ github.event.release.tag_name }}
- run: echo "VERSION=$($Env:TAG_NAME)" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
- - name: Setup MS-Build
- uses: microsoft/setup-msbuild@v1
- - name: restore Nuget Packages
- run: nuget restore .\$($Env:SOLUTION_FILE).sln
- - name: Build Solution
- run: msbuild .\$($Env:SOLUTION_FILE).sln /p:Platform="Any CPU" /p:Configuration="Release" /p:Version="${{ steps.setVersion.outputs.version }}"
- - name: Update Existing Release
- id: create_release
- uses: ncipollo/release-action@v1
- with:
- artifacts: '**\*.clz'
- generateReleaseNotes: false
- prerelease: false
- tag: ${{ github.event.release.tag_name }}
- - name: Add nuget.exe
- uses: nuget/setup-nuget@v1
- - name: Publish to Nuget
- run: |
- nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }}
- nuget setApiKey ${{ secrets.NUGET_API_KEY }}
- nuget push ".\package\PepperDashCore.${{ github.event.release.tag_name }}.nupkg" -Source github
- nuget push ".\package\PepperDashCore.${{ github.event.release.tag_name }}.nupkg" -Source https://api.nuget.org/v3/index.json
diff --git a/.releaserc.json b/.releaserc.json
new file mode 100644
index 0000000..416f7dc
--- /dev/null
+++ b/.releaserc.json
@@ -0,0 +1,36 @@
+{
+ "plugins": [
+ [
+ "@semantic-release/commit-analyzer",
+ {
+ "releaseRules": [
+ { "scope": "force-patch", "release": "patch" },
+ { "scope": "no-release", "release": false }
+ ]
+ }
+ ],
+ "@semantic-release/release-notes-generator",
+ ["@semantic-release/changelog",
+ {
+ "changelogFile": "CHANGELOG.md"
+ }
+ ],
+ [
+ "@semantic-release/exec",
+ {
+ "verifyReleaseCmd": "echo \"newVersion=true\" >> $GITHUB_OUTPUT",
+ "publishCmd": "echo \"version=${nextRelease.version}\" >> $GITHUB_OUTPUT && echo \"tag=${nextRelease.gitTag}\" >> $GITHUB_OUTPUT && echo \"type=${nextRelease.type}\" >> $GITHUB_OUTPUT && echo \"channel=${nextRelease.channel}\" >> $GITHUB_OUTPUT"
+ }
+ ]
+ ],
+ "branches": [
+ "main",
+ {"name": "development", "prerelease": "beta", "channel": "beta"},
+ {"name": "release", "prerelease": "rc", "channel": "rc"},
+ {
+ "name": "replace-me-feature-branch",
+ "prerelease": "replace-me-prerelease",
+ "channel": "replace-me-prerelease"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/PepperDash Core.sln b/PepperDash Core.sln
deleted file mode 100644
index 9ce1b5d..0000000
--- a/PepperDash Core.sln
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.1.32228.430
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PepperDash_Core", "src\Pepperdash Core\PepperDash_Core.csproj", "{85BC97D4-5564-4268-8F7B-1532E2DE0456}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {85BC97D4-5564-4268-8F7B-1532E2DE0456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {85BC97D4-5564-4268-8F7B-1532E2DE0456}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {85BC97D4-5564-4268-8F7B-1532E2DE0456}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {85BC97D4-5564-4268-8F7B-1532E2DE0456}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {E4615FA3-8C8C-4DC0-897B-E85408B4E341}
- EndGlobalSection
-EndGlobal
diff --git a/src/PepperDash Core.sln b/PepperDash.Core.4Series.sln
similarity index 63%
rename from src/PepperDash Core.sln
rename to PepperDash.Core.4Series.sln
index f38b242..2c47107 100644
--- a/src/PepperDash Core.sln
+++ b/PepperDash.Core.4Series.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.1.32228.430
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PepperDash_Core", "Pepperdash Core\PepperDash_Core.csproj", "{66EB9188-E7AC-410D-AD59-931131DA7C2E}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash.Core.4Series", "src\PepperDash.Core.4Series.csproj", "{100ABA44-9471-4B18-8092-4D94D7D82223}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {66EB9188-E7AC-410D-AD59-931131DA7C2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {66EB9188-E7AC-410D-AD59-931131DA7C2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {66EB9188-E7AC-410D-AD59-931131DA7C2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {66EB9188-E7AC-410D-AD59-931131DA7C2E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {100ABA44-9471-4B18-8092-4D94D7D82223}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {100ABA44-9471-4B18-8092-4D94D7D82223}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {100ABA44-9471-4B18-8092-4D94D7D82223}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {100ABA44-9471-4B18-8092-4D94D7D82223}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/output/PepperDashCore.2.0.0-local.clz b/output/PepperDashCore.2.0.0-local.clz
new file mode 100644
index 0000000..c4f7a62
Binary files /dev/null and b/output/PepperDashCore.2.0.0-local.clz differ
diff --git a/src/Pepperdash Core/Comm/._GenericSshClient.cs b/src/Comm/._GenericSshClient.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/._GenericSshClient.cs
rename to src/Comm/._GenericSshClient.cs
diff --git a/src/Pepperdash Core/Comm/._GenericTcpIpClient.cs b/src/Comm/._GenericTcpIpClient.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/._GenericTcpIpClient.cs
rename to src/Comm/._GenericTcpIpClient.cs
diff --git a/src/Pepperdash Core/Comm/CommunicationGather.cs b/src/Comm/CommunicationGather.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/CommunicationGather.cs
rename to src/Comm/CommunicationGather.cs
diff --git a/src/Pepperdash Core/Comm/CommunicationStreamDebugging.cs b/src/Comm/CommunicationStreamDebugging.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/CommunicationStreamDebugging.cs
rename to src/Comm/CommunicationStreamDebugging.cs
diff --git a/src/Pepperdash Core/Comm/ControlPropertiesConfig.cs b/src/Comm/ControlPropertiesConfig.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/ControlPropertiesConfig.cs
rename to src/Comm/ControlPropertiesConfig.cs
diff --git a/src/Pepperdash Core/Comm/DynamicTCPServer.cs b/src/Comm/DynamicTCPServer.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/DynamicTCPServer.cs
rename to src/Comm/DynamicTCPServer.cs
diff --git a/src/Pepperdash Core/Comm/EventArgs.cs b/src/Comm/EventArgs.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/EventArgs.cs
rename to src/Comm/EventArgs.cs
diff --git a/src/Pepperdash Core/Comm/FINISH CommStatic.cs b/src/Comm/FINISH CommStatic.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/FINISH CommStatic.cs
rename to src/Comm/FINISH CommStatic.cs
diff --git a/src/Pepperdash Core/Comm/GenericHttpSseClient.cs b/src/Comm/GenericHttpSseClient.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/GenericHttpSseClient.cs
rename to src/Comm/GenericHttpSseClient.cs
diff --git a/src/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs b/src/Comm/GenericSecureTcpIpClient.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs
rename to src/Comm/GenericSecureTcpIpClient.cs
diff --git a/src/Pepperdash Core/Comm/GenericSecureTcpIpClient_ForServer.cs b/src/Comm/GenericSecureTcpIpClient_ForServer.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/GenericSecureTcpIpClient_ForServer.cs
rename to src/Comm/GenericSecureTcpIpClient_ForServer.cs
diff --git a/src/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs b/src/Comm/GenericSecureTcpIpServer.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs
rename to src/Comm/GenericSecureTcpIpServer.cs
diff --git a/src/Pepperdash Core/Comm/GenericSshClient.cs b/src/Comm/GenericSshClient.cs
similarity index 80%
rename from src/Pepperdash Core/Comm/GenericSshClient.cs
rename to src/Comm/GenericSshClient.cs
index da864e6..ea24876 100644
--- a/src/Pepperdash Core/Comm/GenericSshClient.cs
+++ b/src/Comm/GenericSshClient.cs
@@ -3,6 +3,7 @@ using System.Text;
using System.Threading;
using Crestron.SimplSharp;
using Crestron.SimplSharp.CrestronSockets;
+using Org.BouncyCastle.Utilities;
using PepperDash.Core.Logging;
using Renci.SshNet;
using Renci.SshNet.Common;
@@ -231,7 +232,10 @@ namespace PepperDash.Core
this.LogDebug("Attempting connect");
// Cancel reconnect if running.
- ReconnectTimer.Stop();
+ if (ReconnectTimer != null)
+ {
+ ReconnectTimer.Stop();
+ }
// Cleanup the old client if it already exists
if (Client != null)
@@ -248,8 +252,6 @@ namespace PepperDash.Core
this.LogDebug("Creating new SshClient");
ConnectionInfo connectionInfo = new ConnectionInfo(Hostname, Port, Username, pauth, kauth);
Client = new SshClient(connectionInfo);
-
- Client.ErrorOccurred -= Client_ErrorOccurred;
Client.ErrorOccurred += Client_ErrorOccurred;
//Attempt to connect
@@ -258,6 +260,11 @@ namespace PepperDash.Core
{
Client.Connect();
TheStream = Client.CreateShellStream("PDTShell", 100, 80, 100, 200, 65534);
+ if (TheStream.DataAvailable)
+ {
+ // empty the buffer if there is data
+ string str = TheStream.Read();
+ }
TheStream.DataReceived += Stream_DataReceived;
this.LogInformation("Connected");
ClientStatus = SocketStatus.SOCKET_STATUS_CONNECTED;
@@ -336,7 +343,7 @@ namespace PepperDash.Core
if (ReconnectTimer != null)
{
ReconnectTimer.Stop();
- ReconnectTimer = null;
+ // ReconnectTimer = null;
}
KillClient(SocketStatus.SOCKET_STATUS_BROKEN_LOCALLY);
@@ -349,28 +356,44 @@ namespace PepperDash.Core
{
KillStream();
- if (Client != null)
- {
- Client.Disconnect();
- Client = null;
- ClientStatus = status;
- this.LogDebug("Disconnected");
+ try
+ {
+ if (Client != null)
+ {
+ Client.ErrorOccurred -= Client_ErrorOccurred;
+ Client.Disconnect();
+ Client.Dispose();
+ Client = null;
+ ClientStatus = status;
+ this.LogDebug("Disconnected");
+ }
}
- }
+ catch (Exception ex)
+ {
+ this.LogException(ex,"Exception in Kill Client");
+ }
+ }
///
/// Kills the stream
///
void KillStream()
{
- if (TheStream != null)
- {
- TheStream.DataReceived -= Stream_DataReceived;
- TheStream.Close();
- TheStream.Dispose();
- TheStream = null;
- this.LogDebug("Disconnected stream");
- }
+ try
+ {
+ if (TheStream != null)
+ {
+ TheStream.DataReceived -= Stream_DataReceived;
+ TheStream.Close();
+ TheStream.Dispose();
+ TheStream = null;
+ this.LogDebug("Disconnected stream");
+ }
+ }
+ catch (Exception ex)
+ {
+ this.LogException(ex, "Exception in Kill Stream:{0}");
+ }
}
///
@@ -388,29 +411,33 @@ namespace PepperDash.Core
///
void Stream_DataReceived(object sender, ShellDataEventArgs e)
{
- var bytes = e.Data;
- if (bytes.Length > 0)
+ if (((ShellStream)sender).Length <= 0L)
+ {
+ return;
+ }
+ var response = ((ShellStream)sender).Read();
+
+ var bytesHandler = BytesReceived;
+
+ if (bytesHandler != null)
+ {
+ var bytes = Encoding.UTF8.GetBytes(response);
+ if (StreamDebugging.RxStreamDebuggingIsEnabled)
+ {
+ this.LogInformation("Received {1} bytes: '{0}'", ComTextHelper.GetEscapedText(bytes), bytes.Length);
+ }
+ bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
+ }
+
+ var textHandler = TextReceived;
+ if (textHandler != null)
{
- var bytesHandler = BytesReceived;
- if (bytesHandler != null)
- {
- if (StreamDebugging.RxStreamDebuggingIsEnabled)
- {
- this.LogInformation("Received {1} bytes: '{0}'", ComTextHelper.GetEscapedText(bytes), bytes.Length);
- }
- bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
- }
-
- var textHandler = TextReceived;
- if (textHandler != null)
- {
- var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
- if (StreamDebugging.RxStreamDebuggingIsEnabled)
- this.LogInformation("Received: '{0}'", ComTextHelper.GetDebugText(str));
+ if (StreamDebugging.RxStreamDebuggingIsEnabled)
+ this.LogInformation("Received: '{0}'", ComTextHelper.GetDebugText(response));
- textHandler(this, new GenericCommMethodReceiveTextArgs(str));
- }
- }
+ textHandler(this, new GenericCommMethodReceiveTextArgs(response));
+ }
+
}
@@ -460,22 +487,31 @@ namespace PepperDash.Core
///
public void SendText(string text)
{
- try
- {
- if (Client != null && TheStream != null && IsConnected)
- {
- if (StreamDebugging.TxStreamDebuggingIsEnabled)
- this.LogInformation("Sending {0} characters of text: '{1}'", text.Length, ComTextHelper.GetDebugText(text));
+ try
+ {
+ if (Client != null && TheStream != null && IsConnected)
+ {
+ if (StreamDebugging.TxStreamDebuggingIsEnabled)
+ this.LogInformation(
+ "Sending {length} characters of text: '{text}'",
+ text.Length,
+ ComTextHelper.GetDebugText(text));
- TheStream.Write(text);
- TheStream.Flush();
+ TheStream.Write(text);
+ TheStream.Flush();
+ }
+ else
+ {
+ this.LogDebug("Client is null or disconnected. Cannot Send Text");
+ }
+ }
+ catch (ObjectDisposedException ex)
+ {
+ this.LogException(ex, "ObjectDisposedException sending {message}", text);
- }
- else
- {
- this.LogDebug("Client is null or disconnected. Cannot Send Text");
- }
- }
+ KillClient(SocketStatus.SOCKET_STATUS_CONNECT_FAILED);
+ ReconnectTimer.Reset();
+ }
catch (Exception ex)
{
this.LogException(ex, "Exception sending text: {message}", text);
@@ -488,8 +524,8 @@ namespace PepperDash.Core
///
public void SendBytes(byte[] bytes)
{
- try
- {
+ try
+ {
if (Client != null && TheStream != null && IsConnected)
{
if (StreamDebugging.TxStreamDebuggingIsEnabled)
@@ -503,21 +539,28 @@ namespace PepperDash.Core
this.LogDebug("Client is null or disconnected. Cannot Send Bytes");
}
}
- catch (Exception ex)
- {
- this.LogException(ex, "Exception sending bytes: {message}", ComTextHelper.GetEscapedText(bytes));
+ catch (ObjectDisposedException ex)
+ {
+ this.LogException(ex, "ObjectDisposedException sending {message}", ComTextHelper.GetEscapedText(bytes));
+
+ KillClient(SocketStatus.SOCKET_STATUS_CONNECT_FAILED);
+ ReconnectTimer.Reset();
}
+ catch (Exception ex)
+ {
+ this.LogException(ex, "Exception sending {message}", ComTextHelper.GetEscapedText(bytes));
+ }
}
+ #endregion
- #endregion
- }
+}
- //*****************************************************************************************************
- //*****************************************************************************************************
- ///
- /// Fired when connection changes
- ///
- public class SshConnectionChangeEventArgs : EventArgs
+//*****************************************************************************************************
+//*****************************************************************************************************
+///
+/// Fired when connection changes
+///
+public class SshConnectionChangeEventArgs : EventArgs
{
///
/// Connection State
diff --git a/src/Pepperdash Core/Comm/GenericTcpIpClient.cs b/src/Comm/GenericTcpIpClient.cs
similarity index 99%
rename from src/Pepperdash Core/Comm/GenericTcpIpClient.cs
rename to src/Comm/GenericTcpIpClient.cs
index e5f53b9..9529aa2 100644
--- a/src/Pepperdash Core/Comm/GenericTcpIpClient.cs
+++ b/src/Comm/GenericTcpIpClient.cs
@@ -219,7 +219,8 @@ namespace PepperDash.Core
///
public GenericTcpIpClient()
: base(SplusKey)
- {
+ {
+ StreamDebugging = new CommunicationStreamDebugging(SplusKey);
CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler);
AutoReconnectIntervalMs = 5000;
BufferSize = 2000;
diff --git a/src/Pepperdash Core/Comm/GenericTcpIpClient_ForServer.cs b/src/Comm/GenericTcpIpClient_ForServer.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/GenericTcpIpClient_ForServer.cs
rename to src/Comm/GenericTcpIpClient_ForServer.cs
diff --git a/src/Pepperdash Core/Comm/GenericTcpIpServer.cs b/src/Comm/GenericTcpIpServer.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/GenericTcpIpServer.cs
rename to src/Comm/GenericTcpIpServer.cs
diff --git a/src/Pepperdash Core/Comm/GenericUdpServer.cs b/src/Comm/GenericUdpServer.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/GenericUdpServer.cs
rename to src/Comm/GenericUdpServer.cs
diff --git a/src/Pepperdash Core/Comm/QscCoreDoubleTcpIpClient.cs b/src/Comm/QscCoreDoubleTcpIpClient.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/QscCoreDoubleTcpIpClient.cs
rename to src/Comm/QscCoreDoubleTcpIpClient.cs
diff --git a/src/Pepperdash Core/Comm/TcpClientConfigObject.cs b/src/Comm/TcpClientConfigObject.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/TcpClientConfigObject.cs
rename to src/Comm/TcpClientConfigObject.cs
diff --git a/src/Pepperdash Core/Comm/TcpServerConfigObject.cs b/src/Comm/TcpServerConfigObject.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/TcpServerConfigObject.cs
rename to src/Comm/TcpServerConfigObject.cs
diff --git a/src/Pepperdash Core/Comm/eControlMethods.cs b/src/Comm/eControlMethods.cs
similarity index 100%
rename from src/Pepperdash Core/Comm/eControlMethods.cs
rename to src/Comm/eControlMethods.cs
diff --git a/src/Pepperdash Core/CommunicationExtras.cs b/src/CommunicationExtras.cs
similarity index 94%
rename from src/Pepperdash Core/CommunicationExtras.cs
rename to src/CommunicationExtras.cs
index e780efd..9db5420 100644
--- a/src/Pepperdash Core/CommunicationExtras.cs
+++ b/src/CommunicationExtras.cs
@@ -5,6 +5,7 @@ using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharp.CrestronSockets;
using System.Text.RegularExpressions;
+using Newtonsoft.Json;
namespace PepperDash.Core
{
@@ -25,6 +26,7 @@ namespace PepperDash.Core
///
/// Indicates connection status
///
+ [JsonProperty("isConnected")]
bool IsConnected { get; }
///
/// Connect to the device
@@ -70,6 +72,7 @@ namespace PepperDash.Core
///
/// Object to enable stream debugging
///
+ [JsonProperty("streamDebugging")]
CommunicationStreamDebugging StreamDebugging { get; }
}
@@ -87,7 +90,9 @@ namespace PepperDash.Core
///
/// The current socket status of the client
///
- SocketStatus ClientStatus { get; }
+ [JsonProperty("clinetStatus")]
+ [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
+ SocketStatus ClientStatus { get; }
}
///
@@ -106,10 +111,12 @@ namespace PepperDash.Core
///
/// Enable automatic recconnect
///
+ [JsonProperty("autoReconnect")]
bool AutoReconnect { get; set; }
///
/// Interval in ms to attempt automatic recconnections
///
+ [JsonProperty("autoReconnectIntervalMs")]
int AutoReconnectIntervalMs { get; set; }
}
diff --git a/src/Pepperdash Core/Config/PortalConfigReader.cs b/src/Config/PortalConfigReader.cs
similarity index 100%
rename from src/Pepperdash Core/Config/PortalConfigReader.cs
rename to src/Config/PortalConfigReader.cs
diff --git a/src/Pepperdash Core/Conversion/Convert.cs b/src/Conversion/Convert.cs
similarity index 100%
rename from src/Pepperdash Core/Conversion/Convert.cs
rename to src/Conversion/Convert.cs
diff --git a/src/Pepperdash Core/CoreInterfaces.cs b/src/CoreInterfaces.cs
similarity index 88%
rename from src/Pepperdash Core/CoreInterfaces.cs
rename to src/CoreInterfaces.cs
index c1432c2..6e0b639 100644
--- a/src/Pepperdash Core/CoreInterfaces.cs
+++ b/src/CoreInterfaces.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
+using Newtonsoft.Json;
using Serilog;
namespace PepperDash.Core
@@ -15,6 +16,7 @@ namespace PepperDash.Core
///
/// Unique Key
///
+ [JsonProperty("key")]
string Key { get; }
}
@@ -26,6 +28,7 @@ namespace PepperDash.Core
///
/// Isn't it obvious :)
///
+ [JsonProperty("name")]
string Name { get; }
}
diff --git a/src/Pepperdash Core/Device.cs b/src/Device.cs
similarity index 89%
rename from src/Pepperdash Core/Device.cs
rename to src/Device.cs
index 749713e..fda30c4 100644
--- a/src/Pepperdash Core/Device.cs
+++ b/src/Device.cs
@@ -99,7 +99,15 @@ namespace PepperDash.Core
public void PreActivate()
{
if (_PreActivationActions != null)
- _PreActivationActions.ForEach(a => a.Invoke());
+ _PreActivationActions.ForEach(a => {
+ try
+ {
+ a.Invoke();
+ } catch (Exception e)
+ {
+ Debug.LogMessage(e, "Error in PreActivationAction: " + e.Message, this);
+ }
+ });
}
///
@@ -123,7 +131,16 @@ namespace PepperDash.Core
public void PostActivate()
{
if (_PostActivationActions != null)
- _PostActivationActions.ForEach(a => a.Invoke());
+ _PostActivationActions.ForEach(a => {
+ try
+ {
+ a.Invoke();
+ }
+ catch (Exception e)
+ {
+ Debug.LogMessage(e, "Error in PostActivationAction: " + e.Message, this);
+ }
+ });
}
///
diff --git a/src/Directory.build.props b/src/Directory.build.props
new file mode 100644
index 0000000..196b6a0
--- /dev/null
+++ b/src/Directory.build.props
@@ -0,0 +1,19 @@
+
+
+ 2.0.0-local
+ PepperDash Technologies
+ PepperDash Technologies
+ PepperDash Essentials
+ Copyright © 2025
+ git
+ Crestron; 4series
+ ../output
+ True
+ LICENSE.md
+ README.md
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Directory.build.targets b/src/Directory.build.targets
new file mode 100644
index 0000000..0ef185c
--- /dev/null
+++ b/src/Directory.build.targets
@@ -0,0 +1,43 @@
+
+
+
+ true
+ content;
+
+
+ true
+ content;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ doNotUse
+
+
+
+
\ No newline at end of file
diff --git a/src/EssentialsPlugins-builds-4-series-caller.yml b/src/EssentialsPlugins-builds-4-series-caller.yml
new file mode 100644
index 0000000..c4b4d2c
--- /dev/null
+++ b/src/EssentialsPlugins-builds-4-series-caller.yml
@@ -0,0 +1,21 @@
+name: Build Essentials Plugin
+
+on:
+ push:
+ branches:
+ - '**'
+
+jobs:
+ getVersion:
+ uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-getversion.yml@main
+ secrets: inherit
+ build-4Series:
+ uses: PepperDash/workflow-templates/.github/workflows/essentialsplugins-4Series-builds.yml@main
+ secrets: inherit
+ needs: getVersion
+ if: needs.getVersion.outputs.newVersion == 'true'
+ with:
+ newVersion: ${{ needs.getVersion.outputs.newVersion }}
+ version: ${{ needs.getVersion.outputs.version }}
+ tag: ${{ needs.getVersion.outputs.tag }}
+ channel: ${{ needs.getVersion.outputs.channel }}
\ No newline at end of file
diff --git a/src/Pepperdash Core/EthernetHelper.cs b/src/EthernetHelper.cs
similarity index 100%
rename from src/Pepperdash Core/EthernetHelper.cs
rename to src/EthernetHelper.cs
diff --git a/src/Pepperdash Core/EventArgs.cs b/src/EventArgs.cs
similarity index 100%
rename from src/Pepperdash Core/EventArgs.cs
rename to src/EventArgs.cs
diff --git a/src/Pepperdash Core/GenericRESTfulCommunications/Constants.cs b/src/GenericRESTfulCommunications/Constants.cs
similarity index 100%
rename from src/Pepperdash Core/GenericRESTfulCommunications/Constants.cs
rename to src/GenericRESTfulCommunications/Constants.cs
diff --git a/src/Pepperdash Core/GenericRESTfulCommunications/GenericRESTfulClient.cs b/src/GenericRESTfulCommunications/GenericRESTfulClient.cs
similarity index 100%
rename from src/Pepperdash Core/GenericRESTfulCommunications/GenericRESTfulClient.cs
rename to src/GenericRESTfulCommunications/GenericRESTfulClient.cs
diff --git a/src/Pepperdash Core/JsonStandardObjects/EventArgs and Constants.cs b/src/JsonStandardObjects/EventArgs and Constants.cs
similarity index 100%
rename from src/Pepperdash Core/JsonStandardObjects/EventArgs and Constants.cs
rename to src/JsonStandardObjects/EventArgs and Constants.cs
diff --git a/src/Pepperdash Core/JsonStandardObjects/JsonToSimplDevice.cs b/src/JsonStandardObjects/JsonToSimplDevice.cs
similarity index 100%
rename from src/Pepperdash Core/JsonStandardObjects/JsonToSimplDevice.cs
rename to src/JsonStandardObjects/JsonToSimplDevice.cs
diff --git a/src/Pepperdash Core/JsonStandardObjects/JsonToSimplDeviceConfig.cs b/src/JsonStandardObjects/JsonToSimplDeviceConfig.cs
similarity index 100%
rename from src/Pepperdash Core/JsonStandardObjects/JsonToSimplDeviceConfig.cs
rename to src/JsonStandardObjects/JsonToSimplDeviceConfig.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/Constants.cs b/src/JsonToSimpl/Constants.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/Constants.cs
rename to src/JsonToSimpl/Constants.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/Global.cs b/src/JsonToSimpl/Global.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/Global.cs
rename to src/JsonToSimpl/Global.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs b/src/JsonToSimpl/JsonToSimplArrayLookupChild.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/JsonToSimplArrayLookupChild.cs
rename to src/JsonToSimpl/JsonToSimplArrayLookupChild.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/JsonToSimplChildObjectBase.cs b/src/JsonToSimpl/JsonToSimplChildObjectBase.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/JsonToSimplChildObjectBase.cs
rename to src/JsonToSimpl/JsonToSimplChildObjectBase.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/JsonToSimplFileMaster.cs b/src/JsonToSimpl/JsonToSimplFileMaster.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/JsonToSimplFileMaster.cs
rename to src/JsonToSimpl/JsonToSimplFileMaster.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/JsonToSimplFixedPathObject.cs b/src/JsonToSimpl/JsonToSimplFixedPathObject.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/JsonToSimplFixedPathObject.cs
rename to src/JsonToSimpl/JsonToSimplFixedPathObject.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/JsonToSimplGenericMaster.cs b/src/JsonToSimpl/JsonToSimplGenericMaster.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/JsonToSimplGenericMaster.cs
rename to src/JsonToSimpl/JsonToSimplGenericMaster.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/JsonToSimplMaster.cs b/src/JsonToSimpl/JsonToSimplMaster.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/JsonToSimplMaster.cs
rename to src/JsonToSimpl/JsonToSimplMaster.cs
diff --git a/src/Pepperdash Core/JsonToSimpl/JsonToSimplPortalFileMaster.cs b/src/JsonToSimpl/JsonToSimplPortalFileMaster.cs
similarity index 100%
rename from src/Pepperdash Core/JsonToSimpl/JsonToSimplPortalFileMaster.cs
rename to src/JsonToSimpl/JsonToSimplPortalFileMaster.cs
diff --git a/src/Pepperdash Core/Logging/CrestronEnricher.cs b/src/Logging/CrestronEnricher.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/CrestronEnricher.cs
rename to src/Logging/CrestronEnricher.cs
diff --git a/src/Pepperdash Core/Logging/Debug.cs b/src/Logging/Debug.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/Debug.cs
rename to src/Logging/Debug.cs
diff --git a/src/Pepperdash Core/Logging/DebugConsoleSink.cs b/src/Logging/DebugConsoleSink.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/DebugConsoleSink.cs
rename to src/Logging/DebugConsoleSink.cs
diff --git a/src/Pepperdash Core/Logging/DebugContext.cs b/src/Logging/DebugContext.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/DebugContext.cs
rename to src/Logging/DebugContext.cs
diff --git a/src/Pepperdash Core/Logging/DebugCrestronLoggerSink.cs b/src/Logging/DebugCrestronLoggerSink.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/DebugCrestronLoggerSink.cs
rename to src/Logging/DebugCrestronLoggerSink.cs
diff --git a/src/Pepperdash Core/Logging/DebugErrorLogSink.cs b/src/Logging/DebugErrorLogSink.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/DebugErrorLogSink.cs
rename to src/Logging/DebugErrorLogSink.cs
diff --git a/src/Pepperdash Core/Logging/DebugExtensions.cs b/src/Logging/DebugExtensions.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/DebugExtensions.cs
rename to src/Logging/DebugExtensions.cs
diff --git a/src/Pepperdash Core/Logging/DebugMemory.cs b/src/Logging/DebugMemory.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/DebugMemory.cs
rename to src/Logging/DebugMemory.cs
diff --git a/src/Pepperdash Core/Logging/DebugWebsocketSink.cs b/src/Logging/DebugWebsocketSink.cs
similarity index 100%
rename from src/Pepperdash Core/Logging/DebugWebsocketSink.cs
rename to src/Logging/DebugWebsocketSink.cs
diff --git a/src/Pepperdash Core/Network/DiscoveryThings.cs b/src/Network/DiscoveryThings.cs
similarity index 100%
rename from src/Pepperdash Core/Network/DiscoveryThings.cs
rename to src/Network/DiscoveryThings.cs
diff --git a/src/Pepperdash Core/PasswordManagement/Config.cs b/src/PasswordManagement/Config.cs
similarity index 100%
rename from src/Pepperdash Core/PasswordManagement/Config.cs
rename to src/PasswordManagement/Config.cs
diff --git a/src/Pepperdash Core/PasswordManagement/Constants.cs b/src/PasswordManagement/Constants.cs
similarity index 100%
rename from src/Pepperdash Core/PasswordManagement/Constants.cs
rename to src/PasswordManagement/Constants.cs
diff --git a/src/Pepperdash Core/PasswordManagement/OLD-ARRAY-Config.cs b/src/PasswordManagement/OLD-ARRAY-Config.cs
similarity index 100%
rename from src/Pepperdash Core/PasswordManagement/OLD-ARRAY-Config.cs
rename to src/PasswordManagement/OLD-ARRAY-Config.cs
diff --git a/src/Pepperdash Core/PasswordManagement/OLD-ARRAY-PasswordClient.cs b/src/PasswordManagement/OLD-ARRAY-PasswordClient.cs
similarity index 100%
rename from src/Pepperdash Core/PasswordManagement/OLD-ARRAY-PasswordClient.cs
rename to src/PasswordManagement/OLD-ARRAY-PasswordClient.cs
diff --git a/src/Pepperdash Core/PasswordManagement/OLD-ARRAY-PasswordManager.cs b/src/PasswordManagement/OLD-ARRAY-PasswordManager.cs
similarity index 100%
rename from src/Pepperdash Core/PasswordManagement/OLD-ARRAY-PasswordManager.cs
rename to src/PasswordManagement/OLD-ARRAY-PasswordManager.cs
diff --git a/src/Pepperdash Core/PasswordManagement/PasswordClient.cs b/src/PasswordManagement/PasswordClient.cs
similarity index 100%
rename from src/Pepperdash Core/PasswordManagement/PasswordClient.cs
rename to src/PasswordManagement/PasswordClient.cs
diff --git a/src/Pepperdash Core/PasswordManagement/PasswordManager.cs b/src/PasswordManagement/PasswordManager.cs
similarity index 100%
rename from src/Pepperdash Core/PasswordManagement/PasswordManager.cs
rename to src/PasswordManagement/PasswordManager.cs
diff --git a/src/Pepperdash Core/PepperDash_Core.csproj b/src/PepperDash.Core.4Series.csproj
similarity index 85%
rename from src/Pepperdash Core/PepperDash_Core.csproj
rename to src/PepperDash.Core.4Series.csproj
index 34ec613..d2a2c62 100644
--- a/src/Pepperdash Core/PepperDash_Core.csproj
+++ b/src/PepperDash.Core.4Series.csproj
@@ -2,7 +2,7 @@
PepperDash.Core
PepperDashCore
- net472;net6
+ net472
true
en
bin\$(Configuration)\
@@ -12,10 +12,8 @@
PepperDash Technologies
git
https://github.com/PepperDash/PepperDashCore
- crestron;4series;
- 2.0.0-local
- $(Version)
- ../../package
+ crestron;4series;
+ $(Version)
true
@@ -26,6 +24,14 @@
pdbonly
bin\4Series\$(Configuration)\PepperDashCore.xml
+
+
+
+
+
+
+
+
diff --git a/src/Pepperdash Core/PepperDash_Core.projectinfo b/src/Pepperdash Core/PepperDash_Core.projectinfo
deleted file mode 100644
index ded18d3..0000000
Binary files a/src/Pepperdash Core/PepperDash_Core.projectinfo and /dev/null differ
diff --git a/src/Pepperdash Core/Web/RequestHandlers/DefaultRequestHandler.cs b/src/Pepperdash Core/Web/RequestHandlers/DefaultRequestHandler.cs
deleted file mode 100644
index 57fa1de..0000000
--- a/src/Pepperdash Core/Web/RequestHandlers/DefaultRequestHandler.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-
-namespace PepperDash.Core.Web.RequestHandlers
-{
- ///
- /// Web API default request handler
- ///
- public class DefaultRequestHandler : WebApiBaseRequestHandler
- {
- ///
- /// Constructor
- ///
- public DefaultRequestHandler()
- : base(true)
- { }
- }
-}
diff --git a/src/Pepperdash Core/Web/RequestHandlers/WebApiBaseRequestHandler.cs b/src/Pepperdash Core/Web/RequestHandlers/WebApiBaseRequestHandler.cs
deleted file mode 100644
index caa6a7c..0000000
--- a/src/Pepperdash Core/Web/RequestHandlers/WebApiBaseRequestHandler.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Crestron.SimplSharp.WebScripting;
-
-namespace PepperDash.Core.Web.RequestHandlers
-{
- ///
- /// CWS Base Handler, implements IHttpCwsHandler
- ///
- public abstract class WebApiBaseRequestHandler : IHttpCwsHandler
- {
- private readonly Dictionary> _handlers;
- protected readonly bool EnableCors;
-
- ///
- /// Constructor
- ///
- protected WebApiBaseRequestHandler(bool enableCors)
- {
- EnableCors = enableCors;
-
- _handlers = new Dictionary>
- {
- {"CONNECT", HandleConnect},
- {"DELETE", HandleDelete},
- {"GET", HandleGet},
- {"HEAD", HandleHead},
- {"OPTIONS", HandleOptions},
- {"PATCH", HandlePatch},
- {"POST", HandlePost},
- {"PUT", HandlePut},
- {"TRACE", HandleTrace}
- };
- }
-
- ///
- /// Constructor
- ///
- protected WebApiBaseRequestHandler()
- : this(false)
- {
- }
-
- ///
- /// Handles CONNECT method requests
- ///
- ///
- protected virtual void HandleConnect(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Handles DELETE method requests
- ///
- ///
- protected virtual void HandleDelete(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Handles GET method requests
- ///
- ///
- protected virtual void HandleGet(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Handles HEAD method requests
- ///
- ///
- protected virtual void HandleHead(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Handles OPTIONS method requests
- ///
- ///
- protected virtual void HandleOptions(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Handles PATCH method requests
- ///
- ///
- protected virtual void HandlePatch(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Handles POST method requests
- ///
- ///
- protected virtual void HandlePost(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Handles PUT method requests
- ///
- ///
- protected virtual void HandlePut(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Handles TRACE method requests
- ///
- ///
- protected virtual void HandleTrace(HttpCwsContext context)
- {
- context.Response.StatusCode = 501;
- context.Response.StatusDescription = "Not Implemented";
- context.Response.End();
- }
-
- ///
- /// Process request
- ///
- ///
- public void ProcessRequest(HttpCwsContext context)
- {
- Action handler;
-
- if (!_handlers.TryGetValue(context.Request.HttpMethod, out handler))
- {
- return;
- }
-
- if (EnableCors)
- {
- context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
- context.Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
- }
-
- handler(context);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Pepperdash Core/Web/WebApiServer.cs b/src/Pepperdash Core/Web/WebApiServer.cs
deleted file mode 100644
index 17c737a..0000000
--- a/src/Pepperdash Core/Web/WebApiServer.cs
+++ /dev/null
@@ -1,284 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Crestron.SimplSharp;
-using Crestron.SimplSharp.WebScripting;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-using PepperDash.Core.Web.RequestHandlers;
-
-namespace PepperDash.Core.Web
-{
- ///
- /// Web API server
- ///
- public class WebApiServer : IKeyName
- {
- private const string SplusKey = "Uninitialized Web API Server";
- private const string DefaultName = "Web API Server";
- private const string DefaultBasePath = "/api";
-
- private const uint DebugTrace = 0;
- private const uint DebugInfo = 1;
- private const uint DebugVerbose = 2;
-
- private readonly CCriticalSection _serverLock = new CCriticalSection();
- private HttpCwsServer _server;
-
- ///
- /// Web API server key
- ///
- public string Key { get; private set; }
-
- ///
- /// Web API server name
- ///
- public string Name { get; private set; }
-
- ///
- /// CWS base path, will default to "/api" if not set via initialize method
- ///
- public string BasePath { get; private set; }
-
- ///
- /// Indicates CWS is registered with base path
- ///
- public bool IsRegistered { get; private set; }
-
- ///
- /// Http request handler
- ///
- //public IHttpCwsHandler HttpRequestHandler
- //{
- // get { return _server.HttpRequestHandler; }
- // set
- // {
- // if (_server == null) return;
- // _server.HttpRequestHandler = value;
- // }
- //}
-
- ///
- /// Received request event handler
- ///
- //public event EventHandler ReceivedRequestEvent
- //{
- // add { _server.ReceivedRequestEvent += new HttpCwsRequestEventHandler(value); }
- // remove { _server.ReceivedRequestEvent -= new HttpCwsRequestEventHandler(value); }
- //}
-
- ///
- /// Constructor for S+. Make sure to set necessary properties using init method
- ///
- public WebApiServer()
- : this(SplusKey, DefaultName, null)
- {
- }
-
- ///
- /// Constructor
- ///
- ///
- ///
- public WebApiServer(string key, string basePath)
- : this(key, DefaultName, basePath)
- {
- }
-
- ///
- /// Constructor
- ///
- ///
- ///
- ///
- public WebApiServer(string key, string name, string basePath)
- {
- Key = key;
- Name = string.IsNullOrEmpty(name) ? DefaultName : name;
- BasePath = string.IsNullOrEmpty(basePath) ? DefaultBasePath : basePath;
-
- if (_server == null) _server = new HttpCwsServer(BasePath);
-
- _server.setProcessName(Key);
- _server.HttpRequestHandler = new DefaultRequestHandler();
-
- CrestronEnvironment.ProgramStatusEventHandler += CrestronEnvironment_ProgramStatusEventHandler;
- CrestronEnvironment.EthernetEventHandler += CrestronEnvironment_EthernetEventHandler;
- }
-
- ///
- /// Program status event handler
- ///
- ///
- void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType)
- {
- if (programEventType != eProgramStatusEventType.Stopping) return;
-
- Debug.Console(DebugInfo, this, "Program stopping. stopping server");
-
- Stop();
- }
-
- ///
- /// Ethernet event handler
- ///
- ///
- void CrestronEnvironment_EthernetEventHandler(EthernetEventArgs ethernetEventArgs)
- {
- // Re-enable the server if the link comes back up and the status should be connected
- if (ethernetEventArgs.EthernetEventType == eEthernetEventType.LinkUp && IsRegistered)
- {
- Debug.Console(DebugInfo, this, "Ethernet link up. Server is alreedy registered.");
- return;
- }
-
- Debug.Console(DebugInfo, this, "Ethernet link up. Starting server");
-
- Start();
- }
-
- ///
- /// Initializes CWS class
- ///
- public void Initialize(string key, string basePath)
- {
- Key = key;
- BasePath = string.IsNullOrEmpty(basePath) ? DefaultBasePath : basePath;
- }
-
- ///
- /// Adds a route to CWS
- ///
- public void AddRoute(HttpCwsRoute route)
- {
- if (route == null)
- {
- Debug.Console(DebugInfo, this, "Failed to add route, route parameter is null");
- return;
- }
-
- _server.Routes.Add(route);
-
- }
-
- ///
- /// Removes a route from CWS
- ///
- ///
- public void RemoveRoute(HttpCwsRoute route)
- {
- if (route == null)
- {
- Debug.Console(DebugInfo, this, "Failed to remote route, orute parameter is null");
- return;
- }
-
- _server.Routes.Remove(route);
- }
-
- ///
- /// Returns a list of the current routes
- ///
- public HttpCwsRouteCollection GetRouteCollection()
- {
- return _server.Routes;
- }
-
- ///
- /// Starts CWS instance
- ///
- public void Start()
- {
- try
- {
- _serverLock.Enter();
-
- if (_server == null)
- {
- Debug.Console(DebugInfo, this, "Server is null, unable to start");
- return;
- }
-
- if (IsRegistered)
- {
- Debug.Console(DebugInfo, this, "Server has already been started");
- return;
- }
-
- IsRegistered = _server.Register();
-
- Debug.Console(DebugInfo, this, "Starting server, registration {0}", IsRegistered ? "was successful" : "failed");
- }
- catch (Exception ex)
- {
- Debug.Console(DebugInfo, this, "Start Exception Message: {0}", ex.Message);
- Debug.Console(DebugVerbose, this, "Start Exception StackTrace: {0}", ex.StackTrace);
- if (ex.InnerException != null)
- Debug.Console(DebugVerbose, this, "Start Exception InnerException: {0}", ex.InnerException);
- }
- finally
- {
- _serverLock.Leave();
- }
- }
-
- ///
- /// Stop CWS instance
- ///
- public void Stop()
- {
- try
- {
- _serverLock.Enter();
-
- if (_server == null)
- {
- Debug.Console(DebugInfo, this, "Server is null or has already been stopped");
- return;
- }
-
- IsRegistered = _server.Unregister() == false;
-
- Debug.Console(DebugInfo, this, "Stopping server, unregistration {0}", IsRegistered ? "failed" : "was successful");
-
- _server.Dispose();
- _server = null;
- }
- catch (Exception ex)
- {
- Debug.Console(DebugInfo, this, "Server Stop Exception Message: {0}", ex.Message);
- Debug.Console(DebugVerbose, this, "Server Stop Exception StackTrace: {0}", ex.StackTrace);
- if (ex.InnerException != null)
- Debug.Console(DebugVerbose, this, "Server Stop Exception InnerException: {0}", ex.InnerException);
- }
- finally
- {
- _serverLock.Leave();
- }
- }
-
- ///
- /// Received request handler
- ///
- ///
- /// This is here for development and testing
- ///
- ///
- ///
- public void ReceivedRequestEventHandler(object sender, HttpCwsRequestEventArgs args)
- {
- try
- {
- var j = JsonConvert.SerializeObject(args.Context, Formatting.Indented);
- Debug.Console(DebugVerbose, this, "RecieveRequestEventHandler Context:\x0d\x0a{0}", j);
- }
- catch (Exception ex)
- {
- Debug.Console(DebugInfo, this, "ReceivedRequestEventHandler Exception Message: {0}", ex.Message);
- Debug.Console(DebugVerbose, this, "ReceivedRequestEventHandler Exception StackTrace: {0}", ex.StackTrace);
- if (ex.InnerException != null)
- Debug.Console(DebugVerbose, this, "ReceivedRequestEventHandler Exception InnerException: {0}", ex.InnerException);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/Pepperdash Core/lib/net35/PepperDash_Core.clz b/src/Pepperdash Core/lib/net35/PepperDash_Core.clz
deleted file mode 100644
index 93e2b02..0000000
Binary files a/src/Pepperdash Core/lib/net35/PepperDash_Core.clz and /dev/null differ
diff --git a/src/Pepperdash Core/lib/net35/PepperDash_Core.dll b/src/Pepperdash Core/lib/net35/PepperDash_Core.dll
deleted file mode 100644
index 1b3d097..0000000
Binary files a/src/Pepperdash Core/lib/net35/PepperDash_Core.dll and /dev/null differ
diff --git a/src/Pepperdash Core/Properties/ControlSystem.cfg b/src/Properties/ControlSystem.cfg
similarity index 100%
rename from src/Pepperdash Core/Properties/ControlSystem.cfg
rename to src/Properties/ControlSystem.cfg
diff --git a/src/Pepperdash Core/SystemInfo/EventArgs and Constants.cs b/src/SystemInfo/EventArgs and Constants.cs
similarity index 100%
rename from src/Pepperdash Core/SystemInfo/EventArgs and Constants.cs
rename to src/SystemInfo/EventArgs and Constants.cs
diff --git a/src/Pepperdash Core/SystemInfo/SystemInfoConfig.cs b/src/SystemInfo/SystemInfoConfig.cs
similarity index 100%
rename from src/Pepperdash Core/SystemInfo/SystemInfoConfig.cs
rename to src/SystemInfo/SystemInfoConfig.cs
diff --git a/src/Pepperdash Core/SystemInfo/SystemInfoToSimpl.cs b/src/SystemInfo/SystemInfoToSimpl.cs
similarity index 100%
rename from src/Pepperdash Core/SystemInfo/SystemInfoToSimpl.cs
rename to src/SystemInfo/SystemInfoToSimpl.cs
diff --git a/src/Pepperdash Core/Web/BouncyCertificate.cs b/src/Web/BouncyCertificate.cs
similarity index 100%
rename from src/Pepperdash Core/Web/BouncyCertificate.cs
rename to src/Web/BouncyCertificate.cs
diff --git a/src/Web/RequestHandlers/DefaultRequestHandler.cs b/src/Web/RequestHandlers/DefaultRequestHandler.cs
new file mode 100644
index 0000000..ca19cf2
--- /dev/null
+++ b/src/Web/RequestHandlers/DefaultRequestHandler.cs
@@ -0,0 +1,17 @@
+using Crestron.SimplSharp.WebScripting;
+
+namespace PepperDash.Core.Web.RequestHandlers
+{
+ ///
+ /// Web API default request handler
+ ///
+ public class DefaultRequestHandler : WebApiBaseRequestHandler
+ {
+ ///
+ /// Constructor
+ ///
+ public DefaultRequestHandler()
+ : base(true)
+ { }
+ }
+}
\ No newline at end of file
diff --git a/src/Pepperdash Core/Web/RequestHandlers/WebApiBaseRequestAsyncHandler.cs b/src/Web/RequestHandlers/WebApiBaseRequestAsyncHandler.cs
similarity index 100%
rename from src/Pepperdash Core/Web/RequestHandlers/WebApiBaseRequestAsyncHandler.cs
rename to src/Web/RequestHandlers/WebApiBaseRequestAsyncHandler.cs
diff --git a/src/Web/RequestHandlers/WebApiBaseRequestHandler.cs b/src/Web/RequestHandlers/WebApiBaseRequestHandler.cs
new file mode 100644
index 0000000..99e4aa9
--- /dev/null
+++ b/src/Web/RequestHandlers/WebApiBaseRequestHandler.cs
@@ -0,0 +1,165 @@
+using System;
+using System.Collections.Generic;
+using Crestron.SimplSharp.WebScripting;
+
+namespace PepperDash.Core.Web.RequestHandlers
+{
+ ///
+ /// CWS Base Handler, implements IHttpCwsHandler
+ ///
+ public abstract class WebApiBaseRequestHandler : IHttpCwsHandler
+ {
+ private readonly Dictionary> _handlers;
+ protected readonly bool EnableCors;
+
+ ///
+ /// Constructor
+ ///
+ protected WebApiBaseRequestHandler(bool enableCors)
+ {
+ EnableCors = enableCors;
+
+ _handlers = new Dictionary>
+ {
+ {"CONNECT", HandleConnect},
+ {"DELETE", HandleDelete},
+ {"GET", HandleGet},
+ {"HEAD", HandleHead},
+ {"OPTIONS", HandleOptions},
+ {"PATCH", HandlePatch},
+ {"POST", HandlePost},
+ {"PUT", HandlePut},
+ {"TRACE", HandleTrace}
+ };
+ }
+
+ ///
+ /// Constructor
+ ///
+ protected WebApiBaseRequestHandler()
+ : this(false)
+ {
+ }
+
+ ///
+ /// Handles CONNECT method requests
+ ///
+ ///
+ protected virtual void HandleConnect(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Handles DELETE method requests
+ ///
+ ///
+ protected virtual void HandleDelete(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Handles GET method requests
+ ///
+ ///
+ protected virtual void HandleGet(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Handles HEAD method requests
+ ///
+ ///
+ protected virtual void HandleHead(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Handles OPTIONS method requests
+ ///
+ ///
+ protected virtual void HandleOptions(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Handles PATCH method requests
+ ///
+ ///
+ protected virtual void HandlePatch(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Handles POST method requests
+ ///
+ ///
+ protected virtual void HandlePost(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Handles PUT method requests
+ ///
+ ///
+ protected virtual void HandlePut(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Handles TRACE method requests
+ ///
+ ///
+ protected virtual void HandleTrace(HttpCwsContext context)
+ {
+ context.Response.StatusCode = 501;
+ context.Response.StatusDescription = "Not Implemented";
+ context.Response.End();
+ }
+
+ ///
+ /// Process request
+ ///
+ ///
+ public void ProcessRequest(HttpCwsContext context)
+ {
+ Action handler;
+
+ if (!_handlers.TryGetValue(context.Request.HttpMethod, out handler))
+ {
+ return;
+ }
+
+ if (EnableCors)
+ {
+ context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
+ context.Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
+ }
+
+ handler(context);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Web/WebApiServer.cs b/src/Web/WebApiServer.cs
new file mode 100644
index 0000000..cf45b36
--- /dev/null
+++ b/src/Web/WebApiServer.cs
@@ -0,0 +1,284 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Crestron.SimplSharp;
+using Crestron.SimplSharp.WebScripting;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using PepperDash.Core.Web.RequestHandlers;
+
+namespace PepperDash.Core.Web
+{
+ ///
+ /// Web API server
+ ///
+ public class WebApiServer : IKeyName
+ {
+ private const string SplusKey = "Uninitialized Web API Server";
+ private const string DefaultName = "Web API Server";
+ private const string DefaultBasePath = "/api";
+
+ private const uint DebugTrace = 0;
+ private const uint DebugInfo = 1;
+ private const uint DebugVerbose = 2;
+
+ private readonly CCriticalSection _serverLock = new CCriticalSection();
+ private HttpCwsServer _server;
+
+ ///
+ /// Web API server key
+ ///
+ public string Key { get; private set; }
+
+ ///
+ /// Web API server name
+ ///
+ public string Name { get; private set; }
+
+ ///
+ /// CWS base path, will default to "/api" if not set via initialize method
+ ///
+ public string BasePath { get; private set; }
+
+ ///
+ /// Indicates CWS is registered with base path
+ ///
+ public bool IsRegistered { get; private set; }
+
+ ///
+ /// Http request handler
+ ///
+ //public IHttpCwsHandler HttpRequestHandler
+ //{
+ // get { return _server.HttpRequestHandler; }
+ // set
+ // {
+ // if (_server == null) return;
+ // _server.HttpRequestHandler = value;
+ // }
+ //}
+
+ ///
+ /// Received request event handler
+ ///
+ //public event EventHandler ReceivedRequestEvent
+ //{
+ // add { _server.ReceivedRequestEvent += new HttpCwsRequestEventHandler(value); }
+ // remove { _server.ReceivedRequestEvent -= new HttpCwsRequestEventHandler(value); }
+ //}
+
+ ///
+ /// Constructor for S+. Make sure to set necessary properties using init method
+ ///
+ public WebApiServer()
+ : this(SplusKey, DefaultName, null)
+ {
+ }
+
+ ///
+ /// Constructor
+ ///
+ ///
+ ///
+ public WebApiServer(string key, string basePath)
+ : this(key, DefaultName, basePath)
+ {
+ }
+
+ ///
+ /// Constructor
+ ///
+ ///
+ ///
+ ///
+ public WebApiServer(string key, string name, string basePath)
+ {
+ Key = key;
+ Name = string.IsNullOrEmpty(name) ? DefaultName : name;
+ BasePath = string.IsNullOrEmpty(basePath) ? DefaultBasePath : basePath;
+
+ if (_server == null) _server = new HttpCwsServer(BasePath);
+
+ _server.setProcessName(Key);
+ _server.HttpRequestHandler = new DefaultRequestHandler();
+
+ CrestronEnvironment.ProgramStatusEventHandler += CrestronEnvironment_ProgramStatusEventHandler;
+ CrestronEnvironment.EthernetEventHandler += CrestronEnvironment_EthernetEventHandler;
+ }
+
+ ///
+ /// Program status event handler
+ ///
+ ///
+ void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType)
+ {
+ if (programEventType != eProgramStatusEventType.Stopping) return;
+
+ Debug.Console(DebugInfo, this, "Program stopping. stopping server");
+
+ Stop();
+ }
+
+ ///
+ /// Ethernet event handler
+ ///
+ ///
+ void CrestronEnvironment_EthernetEventHandler(EthernetEventArgs ethernetEventArgs)
+ {
+ // Re-enable the server if the link comes back up and the status should be connected
+ if (ethernetEventArgs.EthernetEventType == eEthernetEventType.LinkUp && IsRegistered)
+ {
+ Debug.Console(DebugInfo, this, "Ethernet link up. Server is alreedy registered.");
+ return;
+ }
+
+ Debug.Console(DebugInfo, this, "Ethernet link up. Starting server");
+
+ Start();
+ }
+
+ ///
+ /// Initializes CWS class
+ ///
+ public void Initialize(string key, string basePath)
+ {
+ Key = key;
+ BasePath = string.IsNullOrEmpty(basePath) ? DefaultBasePath : basePath;
+ }
+
+ ///
+ /// Adds a route to CWS
+ ///
+ public void AddRoute(HttpCwsRoute route)
+ {
+ if (route == null)
+ {
+ Debug.Console(DebugInfo, this, "Failed to add route, route parameter is null");
+ return;
+ }
+
+ _server.Routes.Add(route);
+
+ }
+
+ ///
+ /// Removes a route from CWS
+ ///
+ ///
+ public void RemoveRoute(HttpCwsRoute route)
+ {
+ if (route == null)
+ {
+ Debug.Console(DebugInfo, this, "Failed to remote route, orute parameter is null");
+ return;
+ }
+
+ _server.Routes.Remove(route);
+ }
+
+ ///
+ /// Returns a list of the current routes
+ ///
+ public HttpCwsRouteCollection GetRouteCollection()
+ {
+ return _server.Routes;
+ }
+
+ ///
+ /// Starts CWS instance
+ ///
+ public void Start()
+ {
+ try
+ {
+ _serverLock.Enter();
+
+ if (_server == null)
+ {
+ Debug.Console(DebugInfo, this, "Server is null, unable to start");
+ return;
+ }
+
+ if (IsRegistered)
+ {
+ Debug.Console(DebugInfo, this, "Server has already been started");
+ return;
+ }
+
+ IsRegistered = _server.Register();
+
+ Debug.Console(DebugInfo, this, "Starting server, registration {0}", IsRegistered ? "was successful" : "failed");
+ }
+ catch (Exception ex)
+ {
+ Debug.Console(DebugInfo, this, "Start Exception Message: {0}", ex.Message);
+ Debug.Console(DebugVerbose, this, "Start Exception StackTrace: {0}", ex.StackTrace);
+ if (ex.InnerException != null)
+ Debug.Console(DebugVerbose, this, "Start Exception InnerException: {0}", ex.InnerException);
+ }
+ finally
+ {
+ _serverLock.Leave();
+ }
+ }
+
+ ///
+ /// Stop CWS instance
+ ///
+ public void Stop()
+ {
+ try
+ {
+ _serverLock.Enter();
+
+ if (_server == null)
+ {
+ Debug.Console(DebugInfo, this, "Server is null or has already been stopped");
+ return;
+ }
+
+ IsRegistered = _server.Unregister() == false;
+
+ Debug.Console(DebugInfo, this, "Stopping server, unregistration {0}", IsRegistered ? "failed" : "was successful");
+
+ _server.Dispose();
+ _server = null;
+ }
+ catch (Exception ex)
+ {
+ Debug.Console(DebugInfo, this, "Server Stop Exception Message: {0}", ex.Message);
+ Debug.Console(DebugVerbose, this, "Server Stop Exception StackTrace: {0}", ex.StackTrace);
+ if (ex.InnerException != null)
+ Debug.Console(DebugVerbose, this, "Server Stop Exception InnerException: {0}", ex.InnerException);
+ }
+ finally
+ {
+ _serverLock.Leave();
+ }
+ }
+
+ ///
+ /// Received request handler
+ ///
+ ///
+ /// This is here for development and testing
+ ///
+ ///
+ ///
+ public void ReceivedRequestEventHandler(object sender, HttpCwsRequestEventArgs args)
+ {
+ try
+ {
+ var j = JsonConvert.SerializeObject(args.Context, Formatting.Indented);
+ Debug.Console(DebugVerbose, this, "RecieveRequestEventHandler Context:\x0d\x0a{0}", j);
+ }
+ catch (Exception ex)
+ {
+ Debug.Console(DebugInfo, this, "ReceivedRequestEventHandler Exception Message: {0}", ex.Message);
+ Debug.Console(DebugVerbose, this, "ReceivedRequestEventHandler Exception StackTrace: {0}", ex.StackTrace);
+ if (ex.InnerException != null)
+ Debug.Console(DebugVerbose, this, "ReceivedRequestEventHandler Exception InnerException: {0}", ex.InnerException);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Pepperdash Core/WebApi/Presets/Preset.cs b/src/WebApi/Presets/Preset.cs
similarity index 100%
rename from src/Pepperdash Core/WebApi/Presets/Preset.cs
rename to src/WebApi/Presets/Preset.cs
diff --git a/src/Pepperdash Core/WebApi/Presets/User.cs b/src/WebApi/Presets/User.cs
similarity index 100%
rename from src/Pepperdash Core/WebApi/Presets/User.cs
rename to src/WebApi/Presets/User.cs
diff --git a/src/Pepperdash Core/WebApi/Presets/WebApiPasscodeClient.cs b/src/WebApi/Presets/WebApiPasscodeClient.cs
similarity index 100%
rename from src/Pepperdash Core/WebApi/Presets/WebApiPasscodeClient.cs
rename to src/WebApi/Presets/WebApiPasscodeClient.cs
diff --git a/src/Pepperdash Core/XSigUtility/Serialization/IXSigSerialization.cs b/src/XSigUtility/Serialization/IXSigSerialization.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/Serialization/IXSigSerialization.cs
rename to src/XSigUtility/Serialization/IXSigSerialization.cs
diff --git a/src/Pepperdash Core/XSigUtility/Serialization/XSigSerializationException.cs b/src/XSigUtility/Serialization/XSigSerializationException.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/Serialization/XSigSerializationException.cs
rename to src/XSigUtility/Serialization/XSigSerializationException.cs
diff --git a/src/Pepperdash Core/XSigUtility/Tokens/XSigAnalogToken.cs b/src/XSigUtility/Tokens/XSigAnalogToken.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/Tokens/XSigAnalogToken.cs
rename to src/XSigUtility/Tokens/XSigAnalogToken.cs
diff --git a/src/Pepperdash Core/XSigUtility/Tokens/XSigDigitalToken.cs b/src/XSigUtility/Tokens/XSigDigitalToken.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/Tokens/XSigDigitalToken.cs
rename to src/XSigUtility/Tokens/XSigDigitalToken.cs
diff --git a/src/Pepperdash Core/XSigUtility/Tokens/XSigSerialToken.cs b/src/XSigUtility/Tokens/XSigSerialToken.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/Tokens/XSigSerialToken.cs
rename to src/XSigUtility/Tokens/XSigSerialToken.cs
diff --git a/src/Pepperdash Core/XSigUtility/Tokens/XSigToken.cs b/src/XSigUtility/Tokens/XSigToken.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/Tokens/XSigToken.cs
rename to src/XSigUtility/Tokens/XSigToken.cs
diff --git a/src/Pepperdash Core/XSigUtility/Tokens/XSigTokenType.cs b/src/XSigUtility/Tokens/XSigTokenType.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/Tokens/XSigTokenType.cs
rename to src/XSigUtility/Tokens/XSigTokenType.cs
diff --git a/src/Pepperdash Core/XSigUtility/XSigHelpers.cs b/src/XSigUtility/XSigHelpers.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/XSigHelpers.cs
rename to src/XSigUtility/XSigHelpers.cs
diff --git a/src/Pepperdash Core/XSigUtility/XSigTokenStreamReader.cs b/src/XSigUtility/XSigTokenStreamReader.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/XSigTokenStreamReader.cs
rename to src/XSigUtility/XSigTokenStreamReader.cs
diff --git a/src/Pepperdash Core/XSigUtility/XSigTokenStreamWriter.cs b/src/XSigUtility/XSigTokenStreamWriter.cs
similarity index 100%
rename from src/Pepperdash Core/XSigUtility/XSigTokenStreamWriter.cs
rename to src/XSigUtility/XSigTokenStreamWriter.cs