From 1ab627ec3aa42c04c9b3a7bea197754b80b3d982 Mon Sep 17 00:00:00 2001 From: Joshua Gutenplan Date: Sat, 18 Mar 2017 17:03:49 -0700 Subject: [PATCH] Changes for pull request: Changed .sln file so that it opens in VS2008 instead of 2015 old file marked old. Two changes to auto reconnect on TCPclient. Line 259 if not disconnect called by user. Line 317 add AutoReconnect to the If statement. Added 3 new class files: GenericSecureTcpIpClient, GenericSecureTcpIpServer, and GenericTcpIpServer. Lastly, I updated the name of the EventArgs.cs to be generic, and added the new class event args to that file. --- Pepperdash Core/Pepperdash Core.suo | Bin 65024 -> 68608 bytes .../Pepperdash Core/Comm/DynamicTCPServer.cs | 684 ++++++++++++++++++ .../Pepperdash Core/Comm/EventArgs.cs | 49 +- .../Comm/GenericSecureTcpIpClient.cs | 371 ++++++++++ .../Comm/GenericSecureTcpIpServer.cs | 505 +++++++++++++ .../Comm/GenericTcpIpServer.cs | 505 +++++++++++++ .../Pepperdash Core/PepperDash_Core.csproj | 6 +- .../PepperDash_Core.projectinfo | Bin 1059 -> 1064 bytes .../Pepperdash Core/bin/PepperDash_Core.clz | Bin 1024645 -> 1029429 bytes .../bin/PepperDash_Core.config | 4 +- .../Pepperdash Core/bin/PepperDash_Core.dll | Bin 73400 -> 88760 bytes .../Pepperdash Core/bin/PepperDash_Core.pdb | Bin 138752 -> 167424 bytes .../Pepperdash Core/bin/manifest.info | 2 +- .../Pepperdash Core/bin/manifest.ser | Bin 820 -> 822 bytes .../obj/Debug/PepperDash_Core.dll | Bin 71680 -> 86528 bytes .../obj/Debug/PepperDash_Core.pdb | Bin 210432 -> 214528 bytes 16 files changed, 2121 insertions(+), 5 deletions(-) create mode 100644 Pepperdash Core/Pepperdash Core/Comm/DynamicTCPServer.cs create mode 100644 Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs create mode 100644 Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs create mode 100644 Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs diff --git a/Pepperdash Core/Pepperdash Core.suo b/Pepperdash Core/Pepperdash Core.suo index df08759c7f7d6348a1101858fbc9475e47f459f8..fb8dbb6520256a779bb9f75433fbc41726a8104a 100644 GIT binary patch delta 3213 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 + /// Event for Receiving text + /// + public event EventHandler TextReceived; + + /// + /// Event for client connection socket status change + /// + public event EventHandler ClientConnectionChange; + + /// + /// Event for Server State Change + /// + public event EventHandler ServerStateChange; + #endregion + + #region Properties/Variables + /// + /// Secure or unsecure TCP server. Defaults to Unsecure or standard TCP server without SSL + /// + public bool Secure { get; set; } + + /// + /// S+ Helper for Secure bool. Parameter in SIMPL+ so there is no get, one way set from simpl+ Param to property in func main of SIMPL+ + /// + public ushort USecure + { + set + { + if (value == 1) + Secure = true; + else if (value == 0) + Secure = false; + } + } + + /// + /// Text representation of the Socket Status enum values for the server + /// + public string Status + { + get + { + if (Secure ? SecureServer != null : UnsecureServer != null) + return Secure ? SecureServer.State.ToString() : UnsecureServer.State.ToString(); + else + return ""; + } + + } + + /// + /// Bool showing if socket is connected + /// + public bool IsConnected + { + get + { + return (Secure ? SecureServer != null : UnsecureServer != null) && + (Secure ? SecureServer.State == ServerState.SERVER_CONNECTED : UnsecureServer.State == ServerState.SERVER_CONNECTED); + } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsConnected + { + get { return (ushort)(IsConnected ? 1 : 0); } + } + + /// + /// Bool showing if socket is connected + /// + public bool IsListening + { + get { return (Secure ? SecureServer != null : UnsecureServer != null) && + (Secure ? SecureServer.State == ServerState.SERVER_LISTENING : UnsecureServer.State == ServerState.SERVER_LISTENING); } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsListening + { + get { return (ushort)(IsListening ? 1 : 0); } + } + + public ushort MaxClients { get; set; } // should be set by parameter in SIMPL+ in the MAIN method, Should not ever need to be configurable + /// + /// Number of clients currently connected. + /// + public ushort NumberOfClientsConnected + { + get + { + if (Secure ? SecureServer != null : UnsecureServer != null) + return Secure ? (ushort)SecureServer.NumberOfClientsConnected : (ushort)UnsecureServer.NumberOfClientsConnected; + return 0; + } + } + + /// + /// Port Server should listen on + /// + public int Port { get; set; } + + /// + /// S+ helper for Port + /// + public ushort UPort + { + get { return Convert.ToUInt16(Port); } + set { Port = Convert.ToInt32(value); } + } + + /// + /// Bool to show whether the server requires a preshared key. Must be set the same in the client, and if true shared keys must be identical on server/client + /// + public bool SharedKeyRequired { get; set; } + + /// + /// S+ helper for requires shared key bool + /// + public ushort USharedKeyRequired + { + set + { + if (value == 1) + SharedKeyRequired = true; + else + SharedKeyRequired = false; + } + } + + /// + /// SharedKey is sent for varification to the server. Shared key can be any text (255 char limit in SIMPL+ Module), but must match the Shared Key on the Server module. + /// If SharedKey changes while server is listening or clients are connected, disconnect and stop listening will be called + /// + public string SharedKey { get; set; } + + /// + /// Heartbeat Required bool sets whether server disconnects client if heartbeat is not received + /// + public bool HeartbeatRequired { get; set; } + + /// + /// S+ Helper for Heartbeat Required + /// + public ushort UHeartbeatRequired + { + set + { + if (value == 1) + HeartbeatRequired = true; + else + HeartbeatRequired = false; + } + } + + /// + /// Milliseconds before server expects another heartbeat. Set by property HeartbeatRequiredIntervalInSeconds which is driven from S+ + /// + public int HeartbeatRequiredIntervalMs { get; set; } + + /// + /// Simpl+ Heartbeat Analog value in seconds + /// + public ushort HeartbeatRequiredIntervalInSeconds { set { HeartbeatRequiredIntervalMs = (value * 1000); } } + + /// + /// String to Match for heartbeat. If null or empty any string will reset heartbeat timer + /// + public string HeartbeatStringToMatch { get; set; } + + //private timers for Heartbeats per client + Dictionary HeartbeatTimerDictionary = new Dictionary(); + + //flags to show the secure server is waiting for client at index to send the shared key + List WaitingForSharedKey = new List(); + + //Store the connected client indexes + List ConnectedClientsIndexes = new List(); + + /// + /// Defaults to 2000 + /// + public int BufferSize { get; set; } + + /// + /// Private flag to note that the server has stopped intentionally + /// + private bool ServerStopped { get; set; } + + //Servers + SecureTCPServer SecureServer; + TCPServer UnsecureServer; + + #endregion + + #region Constructors + /// + /// constructor + /// + public DynamicTCPServer() + : base("Uninitialized Dynamic TCP Server") + { + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + BufferSize = 2000; + Secure = false; + } + #endregion + + #region Methods - Server Actions + /// + /// Initialize Key for device using client name from SIMPL+. Called on Listen from SIMPL+ + /// + /// + public void Initialize(string key) + { + Key = key; + } + + /// + /// Start listening on the specified port + /// + public void Listen() + { + try + { + if (Port < 1 || Port > 65535) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericSecureTcpClient '{0}': Invalid port", Key); + ErrorLog.Warn(string.Format("GenericSecureTcpClient '{0}': Invalid port", Key)); + return; + } + if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "GenericSecureTcpClient '{0}': No Shared Key set", Key); + ErrorLog.Warn(string.Format("GenericSecureTcpClient '{0}': No Shared Key set", Key)); + return; + } + if (IsListening) + return; + if (Secure) + { + SecureServer = new SecureTCPServer(Port, MaxClients); + SecureServer.SocketStatusChange += new SecureTCPServerSocketStatusChangeEventHandler(SecureServer_SocketStatusChange); + ServerStopped = false; + SecureServer.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + onServerStateChange(); + Debug.Console(2, "Secure Server Status: {0}, Socket Status: {1}\r\n", SecureServer.State.ToString(), SecureServer.ServerSocketStatus); + } + else + { + UnsecureServer = new TCPServer(Port, MaxClients); + UnsecureServer.SocketStatusChange += new TCPServerSocketStatusChangeEventHandler(UnsecureServer_SocketStatusChange); + ServerStopped = false; + UnsecureServer.WaitForConnectionAsync(IPAddress.Any, UnsecureConnectCallback); + onServerStateChange(); + Debug.Console(2, "Unsecure Server Status: {0}, Socket Status: {1}\r\n", UnsecureServer.State.ToString(), UnsecureServer.ServerSocketStatus); + } + } + catch (Exception ex) + { + ErrorLog.Error("Error with Dynamic Server: {0}", ex.ToString()); + } + } + + /// + /// Stop Listeneing + /// + public void StopListening() + { + Debug.Console(2, "Stopping Listener"); + if (SecureServer != null) + SecureServer.Stop(); + if (UnsecureServer != null) + UnsecureServer.Stop(); + ServerStopped = true; + onServerStateChange(); + } + + /// + /// Disconnect All Clients + /// + public void DisconnectAllClients() + { + Debug.Console(2, "Disconnecting All Clients"); + if (SecureServer != null) + SecureServer.DisconnectAll(); + if (UnsecureServer != null) + UnsecureServer.DisconnectAll(); + onConnectionChange(); + onServerStateChange(); //State shows both listening and connected + } + + /// + /// Broadcast text from server to all connected clients + /// + /// + public void BroadcastText(string text) + { + if (ConnectedClientsIndexes.Count > 0) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + if (Secure) + foreach (uint i in ConnectedClientsIndexes) + SecureServer.SendDataAsync(i, b, b.Length, SecureSendDataAsyncCallback); + else + foreach (uint i in ConnectedClientsIndexes) + UnsecureServer.SendDataAsync(i, b, b.Length, UnsecureSendDataAsyncCallback); + } + } + + /// + /// Not sure this is useful in library, maybe Pro?? + /// + /// + /// + public void SendTextToClient(string text, uint clientIndex) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + if (Secure) + SecureServer.SendDataAsync(clientIndex, b, b.Length, SecureSendDataAsyncCallback); + else + UnsecureServer.SendDataAsync(clientIndex, b, b.Length, UnsecureSendDataAsyncCallback); + } + + //private method to check heartbeat requirements and start or reset timer + void checkHeartbeat(uint clientIndex, string received) + { + if (HeartbeatRequired) + { + if (!string.IsNullOrEmpty(HeartbeatStringToMatch)) + { + if (received == HeartbeatStringToMatch) + { + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); + else + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + } + } + else + { + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); + else + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + } + } + } + #endregion + + #region Methods - HeartbeatTimer Callback + + void HeartbeatTimer_CallbackFunction(object o) + { + uint clientIndex = (uint)o; + + string address = Secure ? SecureServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex) : + UnsecureServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + + ErrorLog.Error("Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); + Debug.Console(2, "Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); + + SendTextToClient("Heartbeat not received by server, closing connection", clientIndex); + + if (Secure) + SecureServer.Disconnect(clientIndex); + else + UnsecureServer.Disconnect(clientIndex); + HeartbeatTimerDictionary.Remove(clientIndex); + } + + #endregion + + #region Methods - Socket Status Changed Callbacks + /// + /// Secure Server Socket Status Changed Callback + /// + /// + /// + /// + void SecureServer_SocketStatusChange(SecureTCPServer server, uint clientIndex, SocketStatus serverSocketStatus) + { + Debug.Console(2, "Client at {0} ServerSocketStatus {1}", + server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), serverSocketStatus.ToString()); + if (server.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + { + if (SharedKeyRequired && !WaitingForSharedKey.Contains(clientIndex)) + WaitingForSharedKey.Add(clientIndex); + if (!ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Add(clientIndex); + } + else + { + if (ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Remove(clientIndex); + if (HeartbeatRequired && HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary.Remove(clientIndex); + } + if(SecureServer.ServerSocketStatus.ToString() != Status) + onConnectionChange(); + } + + /// + /// TCP Server (Unsecure) Socket Status Change Callback + /// + /// + /// + /// + void UnsecureServer_SocketStatusChange(TCPServer server, uint clientIndex, SocketStatus serverSocketStatus) + { + Debug.Console(2, "Client at {0} ServerSocketStatus {1}", + server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), serverSocketStatus.ToString()); + if (server.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + { + if (SharedKeyRequired && !WaitingForSharedKey.Contains(clientIndex)) + WaitingForSharedKey.Add(clientIndex); + if (!ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Add(clientIndex); + } + else + { + if (ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Remove(clientIndex); + if (HeartbeatRequired && HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary.Remove(clientIndex); + } + if (UnsecureServer.ServerSocketStatus.ToString() != Status) + onConnectionChange(); + } + #endregion + + #region Methods Connected Callbacks + /// + /// Secure TCP Client Connected to Secure Server Callback + /// + /// + /// + void SecureConnectCallback(SecureTCPServer mySecureTCPServer, uint clientIndex) + { + if (mySecureTCPServer.ClientConnected(clientIndex)) + { + if (SharedKeyRequired) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(SharedKey + "\n"); + mySecureTCPServer.SendDataAsync(clientIndex, b, b.Length, SecureSendDataAsyncCallback); + Debug.Console(2, "Sent Shared Key to client at {0}", mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + } + if (HeartbeatRequired) + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); + if (mySecureTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + mySecureTCPServer.WaitForConnectionAsync(IPAddress.Any, SecureConnectCallback); + } + } + + /// + /// Unsecure TCP Client Connected to Unsecure Server Callback + /// + /// + /// + void UnsecureConnectCallback(TCPServer myTCPServer, uint clientIndex) + { + if (myTCPServer.ClientConnected(clientIndex)) + { + if (SharedKeyRequired) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(SharedKey + "\n"); + myTCPServer.SendDataAsync(clientIndex, b, b.Length, UnsecureSendDataAsyncCallback); + Debug.Console(2, "Sent Shared Key to client at {0}", myTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + } + if (HeartbeatRequired) + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + myTCPServer.ReceiveDataAsync(clientIndex, UnsecureReceivedDataAsyncCallback); + if (myTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + myTCPServer.WaitForConnectionAsync(IPAddress.Any, UnsecureConnectCallback); + } + if (myTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + myTCPServer.WaitForConnectionAsync(IPAddress.Any, UnsecureConnectCallback); + } + #endregion + + #region Methods - Send/Receive Callbacks + /// + /// Secure Send Data Async Callback + /// + /// + /// + /// + void SecureSendDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesSent) + { + //Seems there is nothing to do here + } + + /// + /// Unsecure Send Data Asyc Callback + /// + /// + /// + /// + void UnsecureSendDataAsyncCallback(TCPServer myTCPServer, uint clientIndex, int numberOfBytesSent) + { + //Seems there is nothing to do here + } + + /// + /// Secure Received Data Async Callback + /// + /// + /// + /// + void SecureReceivedDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesReceived) + { + if (numberOfBytesReceived > 0) + { + string received = "Nothing"; + byte[] bytes = mySecureTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); + received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); + if (WaitingForSharedKey.Contains(clientIndex)) + { + received = received.Replace("\r", ""); + received = received.Replace("\n", ""); + if (received != SharedKey) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); + Debug.Console(2, "Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); + ErrorLog.Error("Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); + mySecureTCPServer.SendDataAsync(clientIndex, b, b.Length, null); + mySecureTCPServer.Disconnect(clientIndex); + } + if (mySecureTCPServer.NumberOfClientsConnected > 0) + mySecureTCPServer.ReceiveDataAsync(SecureReceivedDataAsyncCallback); + WaitingForSharedKey.Remove(clientIndex); + byte[] skResponse = Encoding.GetEncoding(28591).GetBytes("Shared Key Match, Connected and ready for communication"); + mySecureTCPServer.SendDataAsync(clientIndex, skResponse, skResponse.Length, null); + mySecureTCPServer.ReceiveDataAsync(SecureReceivedDataAsyncCallback); + } + else + { + mySecureTCPServer.ReceiveDataAsync(SecureReceivedDataAsyncCallback); + Debug.Console(2, "Secure Server Listening on Port: {0}, client IP: {1}, NumberOfBytesReceived: {2}, Received: {3}\r\n", + mySecureTCPServer.PortNumber, mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), numberOfBytesReceived, received); + onTextReceived(received); + } + checkHeartbeat(clientIndex, received); + } + if (mySecureTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + mySecureTCPServer.ReceiveDataAsync(clientIndex, SecureReceivedDataAsyncCallback); + } + + /// + /// Unsecure Received Data Async Callback + /// + /// + /// + /// + void UnsecureReceivedDataAsyncCallback(TCPServer myTCPServer, uint clientIndex, int numberOfBytesReceived) + { + if (numberOfBytesReceived > 0) + { + string received = "Nothing"; + byte[] bytes = myTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); + received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); + if (WaitingForSharedKey.Contains(clientIndex)) + { + received = received.Replace("\r", ""); + received = received.Replace("\n", ""); + if (received != SharedKey) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); + Debug.Console(2, "Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); + ErrorLog.Error("Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); + myTCPServer.SendDataAsync(clientIndex, b, b.Length, null); + myTCPServer.Disconnect(clientIndex); + } + if (myTCPServer.NumberOfClientsConnected > 0) + myTCPServer.ReceiveDataAsync(UnsecureReceivedDataAsyncCallback); + WaitingForSharedKey.Remove(clientIndex); + byte[] skResponse = Encoding.GetEncoding(28591).GetBytes("Shared Key Match, Connected and ready for communication"); + myTCPServer.SendDataAsync(clientIndex, skResponse, skResponse.Length, null); + myTCPServer.ReceiveDataAsync(UnsecureReceivedDataAsyncCallback); + } + else + { + myTCPServer.ReceiveDataAsync(UnsecureReceivedDataAsyncCallback); + Debug.Console(2, "Secure Server Listening on Port: {0}, client IP: {1}, NumberOfBytesReceived: {2}, Received: {3}\r\n", + myTCPServer.PortNumber, myTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), numberOfBytesReceived, received); + onTextReceived(received); + } + checkHeartbeat(clientIndex, received); + } + if (myTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + myTCPServer.ReceiveDataAsync(clientIndex, UnsecureReceivedDataAsyncCallback); + } + #endregion + + #region Methods - EventHelpers/Callbacks + //Private Helper method to call the Connection Change Event + void onConnectionChange() + { + var handler = ClientConnectionChange; + if (handler != null) + { + if (Secure) + handler(this, new DynamicTCPSocketStatusChangeEventArgs(SecureServer, Secure)); + else + handler(this, new DynamicTCPSocketStatusChangeEventArgs(UnsecureServer, Secure)); + } + } + + //Private Helper Method to call the Text Received Event + void onTextReceived(string text) + { + var handler = TextReceived; + if (handler != null) + handler(this, new CopyCoreForSimplpGenericCommMethodReceiveTextArgs(text)); + } + + //Private Helper Method to call the Server State Change Event + void onServerStateChange() + { + var handler = ServerStateChange; + if(handler != null) + { + if(Secure) + handler(this, new DynamicTCPServerStateChangedEventArgs(SecureServer, Secure)); + else + handler(this, new DynamicTCPServerStateChangedEventArgs(UnsecureServer, Secure)); + } + } + + //Private Event Handler method to handle the closing of connections when the program stops + void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) + { + if (programEventType == eProgramStatusEventType.Stopping) + { + Debug.Console(1, this, "Program stopping. Closing server"); + DisconnectAllClients(); + StopListening(); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/Comm/EventArgs.cs b/Pepperdash Core/Pepperdash Core/Comm/EventArgs.cs index cc7afe4..3732e0d 100644 --- a/Pepperdash Core/Pepperdash Core/Comm/EventArgs.cs +++ b/Pepperdash Core/Pepperdash Core/Comm/EventArgs.cs @@ -1,4 +1,14 @@ -using System; +/*PepperDash Technology Corp. +Copyright: 2017 +------------------------------------ +***Notice of Ownership and Copyright*** +The material in which this notice appears is the property of PepperDash Technology Corporation, +which claims copyright under the laws of the United States of America in the entire body of material +and in all parts thereof, regardless of the use to which it is being put. Any use, in whole or in part, +of this material by another party without the express written permission of PepperDash Technology Corporation is prohibited. +PepperDash Technology Corporation reserves all rights under applicable laws. +------------------------------------ */ +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -24,6 +34,43 @@ namespace PepperDash.Core } #endregion + #region DynamicTCPServerStateChangedEventArgs + public delegate void DynamicTCPServerStateChangedEventDelegate(object server); + + public class DynamicTCPServerStateChangedEventArgs : EventArgs + { + public bool Secure { get; private set; } + public object Server { get; private set; } + + public DynamicTCPServerStateChangedEventArgs() { } + + public DynamicTCPServerStateChangedEventArgs(object server, bool secure) + { + Secure = secure; + Server = server; + } + } + #endregion + + #region DynamicTCPSocketStatusChangeEventDelegate + public delegate void DynamicTCPSocketStatusChangeEventDelegate(object server); + + public class DynamicTCPSocketStatusChangeEventArgs : EventArgs + { + public bool Secure { get; private set; } + public object Server { get; private set; } + + public DynamicTCPSocketStatusChangeEventArgs() { } + + public DynamicTCPSocketStatusChangeEventArgs(object server, bool secure) + { + Secure = secure; + Server = server; + } + } + #endregion + + } \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs new file mode 100644 index 0000000..82305ad --- /dev/null +++ b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpClient.cs @@ -0,0 +1,371 @@ +/*PepperDash Technology Corp. +JAG +Copyright: 2017 +------------------------------------ +***Notice of Ownership and Copyright*** +The material in which this notice appears is the property of PepperDash Technology Corporation, +which claims copyright under the laws of the United States of America in the entire body of material +and in all parts thereof, regardless of the use to which it is being put. Any use, in whole or in part, +of this material by another party without the express written permission of PepperDash Technology Corporation is prohibited. +PepperDash Technology Corporation reserves all rights under applicable laws. +------------------------------------ */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronSockets; + +namespace PepperDash.Core +{ + public class GenericSecureTcpIpClient : Device, ISocketStatus, IAutoReconnect + { + #region Events + + public event EventHandler BytesReceived; + + public event EventHandler TextReceived; + + public event EventHandler ConnectionChange; + + #endregion + + #region Properties & Variables + /// + /// Address of server + /// + public string Hostname { get; set; } + + /// + /// Port on server + /// + public int Port { get; set; } + + /// + /// S+ helper + /// + public ushort UPort + { + get { return Convert.ToUInt16(Port); } + set { Port = Convert.ToInt32(value); } + } + + /// + /// Bool to show whether the server requires a preshared key. This is used in the DynamicTCPServer class + /// + public bool SharedKeyRequired { get; set; } + + /// + /// S+ helper for requires shared key bool + /// + public ushort USharedKeyRequired + { + set + { + if (value == 1) + SharedKeyRequired = true; + else + SharedKeyRequired = false; + } + } + + /// + /// SharedKey is sent for varification to the server. Shared key can be any text (255 char limit in SIMPL+ Module), but must match the Shared Key on the Server module + /// + public string SharedKey { get; set; } + + /// + /// flag to show the client is waiting for the server to send the shared key + /// + private bool WaitingForSharedKeyResponse { get; set; } + + /// + /// Defaults to 2000 + /// + public int BufferSize { get; set; } + + /// + /// Bool showing if socket is connected + /// + public bool IsConnected + { + get + { + return (Client != null) && (Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED); + } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsConnected + { + get { return (ushort)(IsConnected ? 1 : 0); } + } + + /// + /// Client socket status Read only + /// + public SocketStatus ClientStatus + { + get + { + if (Client == null) + return SocketStatus.SOCKET_STATUS_NO_CONNECT; + return Client.ClientStatus; + } + } + + /// + /// Contains the familiar Simpl analog status values. This drives the ConnectionChange event + /// and IsConnected would be true when this == 2. + /// + public ushort UStatus + { + get { return (ushort)ClientStatus; } + } + + /// + /// Status text shows the message associated with socket status + /// + public string ClientStatusText { get { return ClientStatus.ToString(); } } + + /// + /// bool to track if auto reconnect should be set on the socket + /// + public bool AutoReconnect { get; set; } + + /// + /// S+ helper for AutoReconnect + /// + public ushort UAutoReconnect + { + get { return (ushort)(AutoReconnect ? 1 : 0); } + set { AutoReconnect = value == 1; } + } + /// + /// Milliseconds to wait before attempting to reconnect. Defaults to 5000 + /// + public int AutoReconnectIntervalMs { get; set; } + + /// + /// Flag Set only when the disconnect method is called. + /// + bool DisconnectCalledByUser; + + /// + /// Connected bool + /// + public bool Connected + { + get { return (Client != null) && (Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED); } + } + + CTimer RetryTimer; //private Timer for auto reconnect + + SecureTCPClient Client; //Secure Client Class + + #endregion + + #region Constructors + + //Base class constructor + public GenericSecureTcpIpClient(string key, string address, int port, int bufferSize) + : base(key) + { + Hostname = address; + Port = port; + BufferSize = bufferSize; + AutoReconnectIntervalMs = 5000; + } + + //base class constructor + public GenericSecureTcpIpClient() + : base("Uninitialized DynamicTcpClient") + { + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + AutoReconnectIntervalMs = 5000; + BufferSize = 2000; + } + #endregion + + #region Methods + /// + /// Just to help S+ set the key + /// + public void Initialize(string key) + { + Key = key; + } + + /// + /// Handles closing this up when the program shuts down + /// + void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) + { + if (programEventType == eProgramStatusEventType.Stopping) + { + if (Client != null) + { + Debug.Console(1, this, "Program stopping. Closing connection"); + Client.DisconnectFromServer(); + Client.Dispose(); + } + } + } + + /// + /// Connect Method. Will return if already connected. Will write errors if missing address, port, or unique key/name. + /// + public void Connect() + { + if (IsConnected) + return; + + if (string.IsNullOrEmpty(Hostname)) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "DynamicTcpClient '{0}': No address set", Key); + ErrorLog.Warn(string.Format("DynamicTcpClient '{0}': No address set", Key)); + return; + } + if (Port < 1 || Port > 65535) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "DynamicTcpClient '{0}': Invalid port", Key); + ErrorLog.Warn(string.Format("DynamicTcpClient '{0}': Invalid port", Key)); + return; + } + if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "DynamicTcpClient '{0}': No Shared Key set", Key); + ErrorLog.Warn(string.Format("DynamicTcpClient '{0}': No Shared Key set", Key)); + return; + } + Client = new SecureTCPClient(Hostname, Port, BufferSize); + Client.SocketStatusChange += SecureClient_SocketStatusChange; + DisconnectCalledByUser = false; + if (SharedKeyRequired) + WaitingForSharedKeyResponse = true; + Client.ConnectToServer(); + } + + /// + /// Disconnect client. Does not dispose. + /// + public void Disconnect() + { + DisconnectCalledByUser = true; + if(Client != null) + Client.DisconnectFromServer(); + } + + /// + /// callback after connection made + /// + /// + void ConnectToServerCallback(object o) + { + Client.ConnectToServer(); + if (Client.ClientStatus != SocketStatus.SOCKET_STATUS_CONNECTED) + WaitAndTryReconnect(); + } + + /// + /// Called from Socket Status change if auto reconnect and socket disconnected (Not disconnected by user) + /// + void WaitAndTryReconnect() + { + Client.DisconnectFromServer(); + Debug.Console(2, "Attempting reconnect, status={0}", Client.ClientStatus); + + if (!DisconnectCalledByUser) + RetryTimer = new CTimer(ConnectToServerCallback, AutoReconnectIntervalMs); + } + + /// + /// Receive callback + /// + /// + /// + void SecureReceive(SecureTCPClient client, int numBytes) + { + if (numBytes > 0) + { + var bytes = client.IncomingDataBuffer.Take(numBytes).ToArray(); + var str = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length); + if (WaitingForSharedKeyResponse && SharedKeyRequired) + { + if (str != (SharedKey + "\n")) + { + WaitingForSharedKeyResponse = false; + client.DisconnectFromServer(); + CrestronConsole.PrintLine("Client {0} was disconnected from server because the server did not respond with a matching shared key after connection", Key); + ErrorLog.Error("Client {0} was disconnected from server because the server did not respond with a matching shared key after connection", Key); + return; + } + else + { + WaitingForSharedKeyResponse = false; + CrestronConsole.PrintLine("Client {0} successfully connected to the server and received the Shared Key. Ready for communication", Key); + } + } + else + { + var bytesHandler = BytesReceived; + if (bytesHandler != null) + bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes)); + var textHandler = TextReceived; + if (textHandler != null) + { + + textHandler(this, new GenericCommMethodReceiveTextArgs(str)); + } + } + } + client.ReceiveDataAsync(SecureReceive); + } + + /// + /// General send method + /// + public void SendText(string text) + { + var bytes = Encoding.GetEncoding(28591).GetBytes(text); + Client.SendData(bytes, bytes.Length); + } + + public void SendBytes(byte[] bytes) + { + Client.SendData(bytes, bytes.Length); + } + + /// + /// SocketStatusChange Callback + /// + /// + /// + void SecureClient_SocketStatusChange(SecureTCPClient client, SocketStatus clientSocketStatus) + { + Debug.Console(2, this, "Socket status change {0} ({1})", clientSocketStatus, ClientStatusText); + if (client.ClientStatus != SocketStatus.SOCKET_STATUS_CONNECTED && !DisconnectCalledByUser && AutoReconnect) + WaitAndTryReconnect(); + + // Probably doesn't need to be a switch since all other cases were eliminated + switch (clientSocketStatus) + { + case SocketStatus.SOCKET_STATUS_CONNECTED: + client.ReceiveDataAsync(SecureReceive); + if(SharedKeyRequired) + SendText(SharedKey + "\n"); + DisconnectCalledByUser = false; + break; + } + + var handler = ConnectionChange; + if (handler != null) + ConnectionChange(this, new GenericSocketStatusChageEventArgs(this)); + } + #endregion + } +} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs new file mode 100644 index 0000000..365cbcb --- /dev/null +++ b/Pepperdash Core/Pepperdash Core/Comm/GenericSecureTcpIpServer.cs @@ -0,0 +1,505 @@ +/*PepperDash Technology Corp. +JAG +Copyright: 2017 +------------------------------------ +***Notice of Ownership and Copyright*** +The material in which this notice appears is the property of PepperDash Technology Corporation, +which claims copyright under the laws of the United States of America in the entire body of material +and in all parts thereof, regardless of the use to which it is being put. Any use, in whole or in part, +of this material by another party without the express written permission of PepperDash Technology Corporation is prohibited. +PepperDash Technology Corporation reserves all rights under applicable laws. +------------------------------------ */ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronSockets; + +namespace PepperDash.Core +{ + public class GenericSecureTcpIpServer : Device + { + #region Events + /// + /// Event for Receiving text + /// + public event EventHandler TextReceived; + + /// + /// Event for client connection socket status change + /// + public event EventHandler ClientConnectionChange; + + /// + /// Event for Server State Change + /// + public event EventHandler ServerStateChange; + #endregion + + #region Properties/Variables + /// + /// Text representation of the Socket Status enum values for the server + /// + public string Status + { + get + { + if (Server != null) + return Server.State.ToString(); + else + return ServerState.SERVER_NOT_LISTENING.ToString(); + } + + } + + /// + /// Bool showing if socket is connected + /// + public bool IsConnected + { + get { return (Server != null) && (Server.State == ServerState.SERVER_CONNECTED); } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsConnected + { + get { return (ushort)(IsConnected ? 1 : 0); } + } + + /// + /// Bool showing if socket is connected + /// + public bool IsListening + { + get { return (Server != null) && (Server.State == ServerState.SERVER_LISTENING); } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsListening + { + get { return (ushort)(IsListening ? 1 : 0); } + } + + public ushort MaxClients { get; set; } // should be set by parameter in SIMPL+ in the MAIN method, Should not ever need to be configurable + /// + /// Number of clients currently connected. + /// + public ushort NumberOfClientsConnected + { + get + { + if (Server != null) + return (ushort)Server.NumberOfClientsConnected; + return 0; + } + } + + /// + /// Port Server should listen on + /// + public int Port { get; set; } + + /// + /// S+ helper for Port + /// + public ushort UPort + { + get { return Convert.ToUInt16(Port); } + set { Port = Convert.ToInt32(value); } + } + + /// + /// Bool to show whether the server requires a preshared key. Must be set the same in the client, and if true shared keys must be identical on server/client + /// + public bool SharedKeyRequired { get; set; } + + /// + /// S+ helper for requires shared key bool + /// + public ushort USharedKeyRequired + { + set + { + if (value == 1) + SharedKeyRequired = true; + else + SharedKeyRequired = false; + } + } + + /// + /// SharedKey is sent for varification to the server. Shared key can be any text (255 char limit in SIMPL+ Module), but must match the Shared Key on the Server module. + /// If SharedKey changes while server is listening or clients are connected, disconnect and stop listening will be called + /// + public string SharedKey { get; set; } + + /// + /// Heartbeat Required bool sets whether server disconnects client if heartbeat is not received + /// + public bool HeartbeatRequired { get; set; } + + /// + /// S+ Helper for Heartbeat Required + /// + public ushort UHeartbeatRequired + { + set + { + if (value == 1) + HeartbeatRequired = true; + else + HeartbeatRequired = false; + } + } + + /// + /// Milliseconds before server expects another heartbeat. Set by property HeartbeatRequiredIntervalInSeconds which is driven from S+ + /// + public int HeartbeatRequiredIntervalMs { get; set; } + + /// + /// Simpl+ Heartbeat Analog value in seconds + /// + public ushort HeartbeatRequiredIntervalInSeconds { set { HeartbeatRequiredIntervalMs = (value * 1000); } } + + /// + /// String to Match for heartbeat. If null or empty any string will reset heartbeat timer + /// + public string HeartbeatStringToMatch { get; set; } + + //private timers for Heartbeats per client + Dictionary HeartbeatTimerDictionary = new Dictionary(); + + //flags to show the server is waiting for client at index to send the shared key + List WaitingForSharedKey = new List(); + + //Store the connected client indexes + List ConnectedClientsIndexes = new List(); + + /// + /// Defaults to 2000 + /// + public int BufferSize { get; set; } + + /// + /// Private flag to note that the server has stopped intentionally + /// + private bool ServerStopped { get; set; } + + //Servers + SecureTCPServer Server; + + #endregion + + #region Constructors + /// + /// constructor + /// + public GenericSecureTcpIpServer() + : base("Uninitialized Dynamic TCP Server") + { + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + BufferSize = 2000; + } + #endregion + + #region Methods - Server Actions + /// + /// Initialize Key for device using client name from SIMPL+. Called on Listen from SIMPL+ + /// + /// + public void Initialize(string key) + { + Key = key; + } + + /// + /// Start listening on the specified port + /// + public void Listen() + { + try + { + if (Port < 1 || Port > 65535) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "Server '{0}': Invalid port", Key); + ErrorLog.Warn(string.Format("Server '{0}': Invalid port", Key)); + return; + } + if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "Server '{0}': No Shared Key set", Key); + ErrorLog.Warn(string.Format("Server '{0}': No Shared Key set", Key)); + return; + } + if (IsListening) + return; + Server = new SecureTCPServer(Port, MaxClients); + Server.SocketStatusChange += new SecureTCPServerSocketStatusChangeEventHandler(SocketStatusChange); + ServerStopped = false; + Server.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); + onServerStateChange(); + Debug.Console(2, "Server Status: {0}, Socket Status: {1}\r\n", Server.State.ToString(), Server.ServerSocketStatus); + } + catch (Exception ex) + { + ErrorLog.Error("Error with Dynamic Server: {0}", ex.ToString()); + } + } + + /// + /// Stop Listeneing + /// + public void StopListening() + { + Debug.Console(2, "Stopping Listener"); + if (Server != null) + Server.Stop(); + ServerStopped = true; + onServerStateChange(); + } + + /// + /// Disconnect All Clients + /// + public void DisconnectAllClients() + { + Debug.Console(2, "Disconnecting All Clients"); + if (Server != null) + Server.DisconnectAll(); + onConnectionChange(); + onServerStateChange(); //State shows both listening and connected + } + + /// + /// Broadcast text from server to all connected clients + /// + /// + public void BroadcastText(string text) + { + if (ConnectedClientsIndexes.Count > 0) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + foreach (uint i in ConnectedClientsIndexes) + Server.SendDataAsync(i, b, b.Length, SendDataAsyncCallback); + } + } + + /// + /// Not sure this is useful in library, maybe Pro?? + /// + /// + /// + public void SendTextToClient(string text, uint clientIndex) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + Server.SendDataAsync(clientIndex, b, b.Length, SendDataAsyncCallback); + } + + //private method to check heartbeat requirements and start or reset timer + void checkHeartbeat(uint clientIndex, string received) + { + if (HeartbeatRequired) + { + if (!string.IsNullOrEmpty(HeartbeatStringToMatch)) + { + if (received == HeartbeatStringToMatch) + { + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); + else + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + } + } + else + { + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); + else + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + } + } + } + #endregion + + #region Methods - Callbacks + /// + /// Callback to disconnect if heartbeat timer finishes without being reset + /// + /// + void HeartbeatTimer_CallbackFunction(object o) + { + uint clientIndex = (uint)o; + + string address = Server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + + ErrorLog.Error("Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); + Debug.Console(2, "Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); + + SendTextToClient("Heartbeat not received by server, closing connection", clientIndex); + Server.Disconnect(clientIndex); + HeartbeatTimerDictionary.Remove(clientIndex); + } + + /// + /// TCP Server Socket Status Change Callback + /// + /// + /// + /// + void SocketStatusChange(SecureTCPServer server, uint clientIndex, SocketStatus serverSocketStatus) + { + Debug.Console(2, "Client at {0} ServerSocketStatus {1}", + server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), serverSocketStatus.ToString()); + if (server.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + { + if (SharedKeyRequired && !WaitingForSharedKey.Contains(clientIndex)) + WaitingForSharedKey.Add(clientIndex); + if (!ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Add(clientIndex); + } + else + { + if (ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Remove(clientIndex); + if (HeartbeatRequired && HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary.Remove(clientIndex); + } + if (Server.ServerSocketStatus.ToString() != Status) + onConnectionChange(); + } + + /// + /// TCP Client Connected to Server Callback + /// + /// + /// + void ConnectCallback(SecureTCPServer mySecureTCPServer, uint clientIndex) + { + if (mySecureTCPServer.ClientConnected(clientIndex)) + { + if (SharedKeyRequired) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(SharedKey + "\n"); + mySecureTCPServer.SendDataAsync(clientIndex, b, b.Length, SendDataAsyncCallback); + Debug.Console(2, "Sent Shared Key to client at {0}", mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + } + if (HeartbeatRequired) + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + mySecureTCPServer.ReceiveDataAsync(clientIndex, ReceivedDataAsyncCallback); + if (mySecureTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + mySecureTCPServer.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); + } + if (mySecureTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + mySecureTCPServer.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); + } + + /// + /// Send Data Asyc Callback + /// + /// + /// + /// + void SendDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesSent) + { + //Seems there is nothing to do here + } + + /// + /// Received Data Async Callback + /// + /// + /// + /// + void ReceivedDataAsyncCallback(SecureTCPServer mySecureTCPServer, uint clientIndex, int numberOfBytesReceived) + { + if (numberOfBytesReceived > 0) + { + string received = "Nothing"; + byte[] bytes = mySecureTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); + received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); + if (WaitingForSharedKey.Contains(clientIndex)) + { + received = received.Replace("\r", ""); + received = received.Replace("\n", ""); + if (received != SharedKey) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); + Debug.Console(2, "Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); + ErrorLog.Error("Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); + mySecureTCPServer.SendDataAsync(clientIndex, b, b.Length, null); + mySecureTCPServer.Disconnect(clientIndex); + } + if (mySecureTCPServer.NumberOfClientsConnected > 0) + mySecureTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); + WaitingForSharedKey.Remove(clientIndex); + byte[] skResponse = Encoding.GetEncoding(28591).GetBytes("Shared Key Match, Connected and ready for communication"); + mySecureTCPServer.SendDataAsync(clientIndex, skResponse, skResponse.Length, null); + mySecureTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); + } + else + { + mySecureTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); + Debug.Console(2, "Server Listening on Port: {0}, client IP: {1}, NumberOfBytesReceived: {2}, Received: {3}\r\n", + mySecureTCPServer.PortNumber, mySecureTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), numberOfBytesReceived, received); + onTextReceived(received); + } + checkHeartbeat(clientIndex, received); + } + if (mySecureTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + mySecureTCPServer.ReceiveDataAsync(clientIndex, ReceivedDataAsyncCallback); + } + #endregion + + #region Methods - EventHelpers/Callbacks + //Private Helper method to call the Connection Change Event + void onConnectionChange() + { + var handler = ClientConnectionChange; + if (handler != null) + handler(this, new DynamicTCPSocketStatusChangeEventArgs(Server, false)); + } + + //Private Helper Method to call the Text Received Event + void onTextReceived(string text) + { + var handler = TextReceived; + if (handler != null) + handler(this, new GenericCommMethodReceiveTextArgs(text)); + } + + //Private Helper Method to call the Server State Change Event + void onServerStateChange() + { + var handler = ServerStateChange; + if (handler != null) + handler(this, new DynamicTCPServerStateChangedEventArgs(Server, false)); + } + + //Private Event Handler method to handle the closing of connections when the program stops + void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) + { + if (programEventType == eProgramStatusEventType.Stopping) + { + Debug.Console(1, this, "Program stopping. Closing server"); + DisconnectAllClients(); + StopListening(); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs new file mode 100644 index 0000000..5b96684 --- /dev/null +++ b/Pepperdash Core/Pepperdash Core/Comm/GenericTcpIpServer.cs @@ -0,0 +1,505 @@ +/*PepperDash Technology Corp. +JAG +Copyright: 2017 +------------------------------------ +***Notice of Ownership and Copyright*** +The material in which this notice appears is the property of PepperDash Technology Corporation, +which claims copyright under the laws of the United States of America in the entire body of material +and in all parts thereof, regardless of the use to which it is being put. Any use, in whole or in part, +of this material by another party without the express written permission of PepperDash Technology Corporation is prohibited. +PepperDash Technology Corporation reserves all rights under applicable laws. +------------------------------------ */ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronSockets; + +namespace PepperDash.Core +{ + public class GenericTcpIpServer : Device + { + #region Events + /// + /// Event for Receiving text + /// + public event EventHandler TextReceived; + + /// + /// Event for client connection socket status change + /// + public event EventHandler ClientConnectionChange; + + /// + /// Event for Server State Change + /// + public event EventHandler ServerStateChange; + #endregion + + #region Properties/Variables + /// + /// Text representation of the Socket Status enum values for the server + /// + public string Status + { + get + { + if (Server != null) + return Server.State.ToString(); + else + return ServerState.SERVER_NOT_LISTENING.ToString(); + } + + } + + /// + /// Bool showing if socket is connected + /// + public bool IsConnected + { + get { return (Server != null) && (Server.State == ServerState.SERVER_CONNECTED); } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsConnected + { + get { return (ushort)(IsConnected ? 1 : 0); } + } + + /// + /// Bool showing if socket is connected + /// + public bool IsListening + { + get { return (Server != null) && (Server.State == ServerState.SERVER_LISTENING); } + } + + /// + /// S+ helper for IsConnected + /// + public ushort UIsListening + { + get { return (ushort)(IsListening ? 1 : 0); } + } + + public ushort MaxClients { get; set; } // should be set by parameter in SIMPL+ in the MAIN method, Should not ever need to be configurable + /// + /// Number of clients currently connected. + /// + public ushort NumberOfClientsConnected + { + get + { + if (Server != null) + return (ushort)Server.NumberOfClientsConnected; + return 0; + } + } + + /// + /// Port Server should listen on + /// + public int Port { get; set; } + + /// + /// S+ helper for Port + /// + public ushort UPort + { + get { return Convert.ToUInt16(Port); } + set { Port = Convert.ToInt32(value); } + } + + /// + /// Bool to show whether the server requires a preshared key. Must be set the same in the client, and if true shared keys must be identical on server/client + /// + public bool SharedKeyRequired { get; set; } + + /// + /// S+ helper for requires shared key bool + /// + public ushort USharedKeyRequired + { + set + { + if (value == 1) + SharedKeyRequired = true; + else + SharedKeyRequired = false; + } + } + + /// + /// SharedKey is sent for varification to the server. Shared key can be any text (255 char limit in SIMPL+ Module), but must match the Shared Key on the Server module. + /// If SharedKey changes while server is listening or clients are connected, disconnect and stop listening will be called + /// + public string SharedKey { get; set; } + + /// + /// Heartbeat Required bool sets whether server disconnects client if heartbeat is not received + /// + public bool HeartbeatRequired { get; set; } + + /// + /// S+ Helper for Heartbeat Required + /// + public ushort UHeartbeatRequired + { + set + { + if (value == 1) + HeartbeatRequired = true; + else + HeartbeatRequired = false; + } + } + + /// + /// Milliseconds before server expects another heartbeat. Set by property HeartbeatRequiredIntervalInSeconds which is driven from S+ + /// + public int HeartbeatRequiredIntervalMs { get; set; } + + /// + /// Simpl+ Heartbeat Analog value in seconds + /// + public ushort HeartbeatRequiredIntervalInSeconds { set { HeartbeatRequiredIntervalMs = (value * 1000); } } + + /// + /// String to Match for heartbeat. If null or empty any string will reset heartbeat timer + /// + public string HeartbeatStringToMatch { get; set; } + + //private timers for Heartbeats per client + Dictionary HeartbeatTimerDictionary = new Dictionary(); + + //flags to show the server is waiting for client at index to send the shared key + List WaitingForSharedKey = new List(); + + //Store the connected client indexes + List ConnectedClientsIndexes = new List(); + + /// + /// Defaults to 2000 + /// + public int BufferSize { get; set; } + + /// + /// Private flag to note that the server has stopped intentionally + /// + private bool ServerStopped { get; set; } + + //Servers + TCPServer Server; + + #endregion + + #region Constructors + /// + /// constructor + /// + public GenericTcpIpServer() + : base("Uninitialized Dynamic TCP Server") + { + CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); + BufferSize = 2000; + } + #endregion + + #region Methods - Server Actions + /// + /// Initialize Key for device using client name from SIMPL+. Called on Listen from SIMPL+ + /// + /// + public void Initialize(string key) + { + Key = key; + } + + /// + /// Start listening on the specified port + /// + public void Listen() + { + try + { + if (Port < 1 || Port > 65535) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "Server '{0}': Invalid port", Key); + ErrorLog.Warn(string.Format("Server '{0}': Invalid port", Key)); + return; + } + if (string.IsNullOrEmpty(SharedKey) && SharedKeyRequired) + { + Debug.Console(1, Debug.ErrorLogLevel.Warning, "Server '{0}': No Shared Key set", Key); + ErrorLog.Warn(string.Format("Server '{0}': No Shared Key set", Key)); + return; + } + if (IsListening) + return; + Server = new TCPServer(Port, MaxClients); + Server.SocketStatusChange += new TCPServerSocketStatusChangeEventHandler(SocketStatusChange); + ServerStopped = false; + Server.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); + onServerStateChange(); + Debug.Console(2, "Server Status: {0}, Socket Status: {1}\r\n", Server.State.ToString(), Server.ServerSocketStatus); + } + catch (Exception ex) + { + ErrorLog.Error("Error with Dynamic Server: {0}", ex.ToString()); + } + } + + /// + /// Stop Listeneing + /// + public void StopListening() + { + Debug.Console(2, "Stopping Listener"); + if (Server != null) + Server.Stop(); + ServerStopped = true; + onServerStateChange(); + } + + /// + /// Disconnect All Clients + /// + public void DisconnectAllClients() + { + Debug.Console(2, "Disconnecting All Clients"); + if (Server != null) + Server.DisconnectAll(); + onConnectionChange(); + onServerStateChange(); //State shows both listening and connected + } + + /// + /// Broadcast text from server to all connected clients + /// + /// + public void BroadcastText(string text) + { + if (ConnectedClientsIndexes.Count > 0) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + foreach (uint i in ConnectedClientsIndexes) + Server.SendDataAsync(i, b, b.Length, SendDataAsyncCallback); + } + } + + /// + /// Not sure this is useful in library, maybe Pro?? + /// + /// + /// + public void SendTextToClient(string text, uint clientIndex) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(text); + Server.SendDataAsync(clientIndex, b, b.Length, SendDataAsyncCallback); + } + + //private method to check heartbeat requirements and start or reset timer + void checkHeartbeat(uint clientIndex, string received) + { + if (HeartbeatRequired) + { + if (!string.IsNullOrEmpty(HeartbeatStringToMatch)) + { + if (received == HeartbeatStringToMatch) + { + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); + else + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + } + } + else + { + if (HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary[clientIndex].Reset(HeartbeatRequiredIntervalMs); + else + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + } + } + } + #endregion + + #region Methods - Callbacks + /// + /// Callback to disconnect if heartbeat timer finishes without being reset + /// + /// + void HeartbeatTimer_CallbackFunction(object o) + { + uint clientIndex = (uint)o; + + string address = Server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex); + + ErrorLog.Error("Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); + Debug.Console(2, "Heartbeat not received for Client at IP: {0}, DISCONNECTING BECAUSE HEARTBEAT REQUIRED IS TRUE", address); + + SendTextToClient("Heartbeat not received by server, closing connection", clientIndex); + Server.Disconnect(clientIndex); + HeartbeatTimerDictionary.Remove(clientIndex); + } + + /// + /// TCP Server Socket Status Change Callback + /// + /// + /// + /// + void SocketStatusChange(TCPServer server, uint clientIndex, SocketStatus serverSocketStatus) + { + Debug.Console(2, "Client at {0} ServerSocketStatus {1}", + server.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), serverSocketStatus.ToString()); + if (server.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + { + if (SharedKeyRequired && !WaitingForSharedKey.Contains(clientIndex)) + WaitingForSharedKey.Add(clientIndex); + if (!ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Add(clientIndex); + } + else + { + if (ConnectedClientsIndexes.Contains(clientIndex)) + ConnectedClientsIndexes.Remove(clientIndex); + if (HeartbeatRequired && HeartbeatTimerDictionary.ContainsKey(clientIndex)) + HeartbeatTimerDictionary.Remove(clientIndex); + } + if (Server.ServerSocketStatus.ToString() != Status) + onConnectionChange(); + } + + /// + /// TCP Client Connected to Server Callback + /// + /// + /// + void ConnectCallback(TCPServer myTCPServer, uint clientIndex) + { + if (myTCPServer.ClientConnected(clientIndex)) + { + if (SharedKeyRequired) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes(SharedKey + "\n"); + myTCPServer.SendDataAsync(clientIndex, b, b.Length, SendDataAsyncCallback); + Debug.Console(2, "Sent Shared Key to client at {0}", myTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex)); + } + if (HeartbeatRequired) + { + CTimer HeartbeatTimer = new CTimer(HeartbeatTimer_CallbackFunction, clientIndex, HeartbeatRequiredIntervalMs); + HeartbeatTimerDictionary.Add(clientIndex, HeartbeatTimer); + } + myTCPServer.ReceiveDataAsync(clientIndex, ReceivedDataAsyncCallback); + if (myTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + myTCPServer.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); + } + if (myTCPServer.State != ServerState.SERVER_LISTENING && MaxClients > 1 && !ServerStopped) + myTCPServer.WaitForConnectionAsync(IPAddress.Any, ConnectCallback); + } + + /// + /// Send Data Asyc Callback + /// + /// + /// + /// + void SendDataAsyncCallback(TCPServer myTCPServer, uint clientIndex, int numberOfBytesSent) + { + //Seems there is nothing to do here + } + + /// + /// Received Data Async Callback + /// + /// + /// + /// + void ReceivedDataAsyncCallback(TCPServer myTCPServer, uint clientIndex, int numberOfBytesReceived) + { + if (numberOfBytesReceived > 0) + { + string received = "Nothing"; + byte[] bytes = myTCPServer.GetIncomingDataBufferForSpecificClient(clientIndex); + received = System.Text.Encoding.GetEncoding(28591).GetString(bytes, 0, numberOfBytesReceived); + if (WaitingForSharedKey.Contains(clientIndex)) + { + received = received.Replace("\r", ""); + received = received.Replace("\n", ""); + if (received != SharedKey) + { + byte[] b = Encoding.GetEncoding(28591).GetBytes("Shared key did not match server. Disconnecting"); + Debug.Console(2, "Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); + ErrorLog.Error("Client at index {0} Shared key did not match the server, disconnecting client", clientIndex); + myTCPServer.SendDataAsync(clientIndex, b, b.Length, null); + myTCPServer.Disconnect(clientIndex); + } + if (myTCPServer.NumberOfClientsConnected > 0) + myTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); + WaitingForSharedKey.Remove(clientIndex); + byte[] skResponse = Encoding.GetEncoding(28591).GetBytes("Shared Key Match, Connected and ready for communication"); + myTCPServer.SendDataAsync(clientIndex, skResponse, skResponse.Length, null); + myTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); + } + else + { + myTCPServer.ReceiveDataAsync(ReceivedDataAsyncCallback); + Debug.Console(2, "Server Listening on Port: {0}, client IP: {1}, NumberOfBytesReceived: {2}, Received: {3}\r\n", + myTCPServer.PortNumber, myTCPServer.GetAddressServerAcceptedConnectionFromForSpecificClient(clientIndex), numberOfBytesReceived, received); + onTextReceived(received); + } + checkHeartbeat(clientIndex, received); + } + if (myTCPServer.GetServerSocketStatusForSpecificClient(clientIndex) == SocketStatus.SOCKET_STATUS_CONNECTED) + myTCPServer.ReceiveDataAsync(clientIndex, ReceivedDataAsyncCallback); + } + #endregion + + #region Methods - EventHelpers/Callbacks + //Private Helper method to call the Connection Change Event + void onConnectionChange() + { + var handler = ClientConnectionChange; + if (handler != null) + handler(this, new DynamicTCPSocketStatusChangeEventArgs(Server, false)); + } + + //Private Helper Method to call the Text Received Event + void onTextReceived(string text) + { + var handler = TextReceived; + if (handler != null) + handler(this, new GenericCommMethodReceiveTextArgs(text)); + } + + //Private Helper Method to call the Server State Change Event + void onServerStateChange() + { + var handler = ServerStateChange; + if (handler != null) + handler(this, new DynamicTCPServerStateChangedEventArgs(Server, false)); + } + + //Private Event Handler method to handle the closing of connections when the program stops + void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) + { + if (programEventType == eProgramStatusEventType.Stopping) + { + Debug.Console(1, this, "Program stopping. Closing server"); + DisconnectAllClients(); + StopListening(); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj index 8d0a646..4506190 100644 --- a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj +++ b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj @@ -64,10 +64,13 @@ + + + Code + - @@ -76,6 +79,7 @@ + diff --git a/Pepperdash Core/Pepperdash Core/PepperDash_Core.projectinfo b/Pepperdash Core/Pepperdash Core/PepperDash_Core.projectinfo index 700ed773384edb196c0c41677515edf2a5fd0fe6..2060a7fabbaaa6545539f428ddcd539b0a736098 100644 GIT binary patch delta 717 zcmV;;0y6!h2&f2NB19&_wVi8+uwP(y@L;t$Uy<)lL`SNe?#rp*G-!*UI-?A z0u#m;b+$O0y~!>%HCW`e%)#+&RK0B!vD;nK4)TY)dj}7*Jm0-H1rjn3gV-w}<6l0nrdj#3Lh1qjlPdy>e}+A$`;-0I{`CIt z!^x-j?`P)^iG4rKXVYwN_UWgShd%Xh4?LKOTXeBuCT`#9|BGhj!O*OHJ1+_Fz+7bc z?7?0>*~xbw-oO7ayLW#7(+4{Tll;M_`}_B2(^-5j;vj<=xCP)_%|N`X{}<8yV2JLX zJa^cC=i&7J?B33de`qwDogX~BKfU*9Hl1L6JG1+7lJ}r>`29whx1x5hm;V>nIV_Tm&D1{*5Q9_0QEe4tktLF1Qv|Cjs{c5RFEVw!=?X*}z)mErwAygUlrybb^W*wCNw delta 712 zcmV;(0yq7r2%`v)g+pS0o6>hL^VKS^pJvVc_dluXoLbJJpXT%_{WzB&7xZIqXZOMO z&b{s32XA(F9_<}G+TR=R-G6xS@czT?od=J0c9F_K0os!c0V98l)9dS|%@;2Ol|F?D z<%>F7oXy^37n>R^@>(Y0cs48AqFQDphAE$&RErgjclPD-mNR5t_*taVh6y`eO!C?5 zYF$tB<9a$TE^|w*lWKMSrg~PDv%GFTdSrNc@1tKb`sj;dSuECzXGOiZ%If?lsRhvi zoIc*!c|iZ)eL#P}zg)Mgb^9`Fzj-bs=wD>Z;yiC!huS^*G(NjJ+Ap$VdE7MlVp3ka z*Y@cfkNVwLXJttZf+3DS-8;BH-hHt1DQ2)kj4ln&x?B4nPPao_YO!5bx?(g59O=t1Bh=UAf;1+;yH3RXk{$E7*gCV+m^4wwn zorlx=vwJ%;qS1eBc1|XGdhgS0I>GpMX7}SH??LPE`;9PfMeSZM|1To+!y!Vy%Fj!9 zV%2hh$@6>X=Lh+0GRY41r_qaDQ-b_rd)g@>V7f2IgQ8YA^-2 zfPJee80_umeg--p*!kEUnvbVhn~i5#>t^5{apvBq*@SH2r_)(J+kbFA*_l4Lzq_;d u>8II)+@FCD^a>+r{F3kgl3&8EZE;>qGq5?0XI-{3y#EKG^k(_K4gdf`yoc)m diff --git a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.clz b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.clz index a4084b6067d3cf0f9261c9e144d0334e57a6e85a..85471a9ed4d538533e58120570f996dd443a07fb 100644 GIT binary patch delta 36220 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 diff --git a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.config b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.config index 2913c74..b28fb6d 100644 --- a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.config +++ b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.config @@ -10,8 +10,8 @@ - 3/17/2017 10:28:42 AM - 1.0.6285.17060 + 3/18/2017 5:00:59 PM + 1.0.6286.28828 Crestron.SIMPLSharp, Version=2.0.52.0, Culture=neutral, PublicKeyToken=812d080f93e2de10 diff --git a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.dll b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.dll index 71a24494ab1bd9221832cd5d67f7fa1411561f67..acb55a8fc1ba9d16bab60c540da2352d7cffdc5f 100644 GIT binary patch delta 29542 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

DidEXAVo(Qe$Ft| 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 delta 15001 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 diff --git a/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.pdb b/Pepperdash Core/Pepperdash Core/bin/PepperDash_Core.pdb index e89f32570bef1b9217464be386486f61533a1af9..f639405965a801748e83de97f009ea90969ce58e 100644 GIT binary patch delta 44362 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 HS>pc#z(N08 delta 23581 zcmaK!4`3C=wf}dPB;JGs5)wiP3AqU&Br!k;2?Pn@1_C4q7z8aMDglCkfB}QXmYPco zuh60mEI4SPh4-jppH@)hkAjUpv}i%WVr$=13oSmupHlRpq6PeY&hBh-#ozBOd~;^! zoS8Xu=FHjIxw{+Q92Y(iXwC1^RasVbwB;UM)U(+!ud8S5Y+Hq&RrdR8eN0N+ci&h}^b^M~=iEAZ&ZK+#0QE zAqt&S>&FJ7t|VKQqsG_i@6WXpl%+rYfqlcX18eW>nu?18_*!*p{{3IleS2=47m8jg4DZ zmDBPvl@%p=RXhys4W|WsNjgmJr@@nPREjdMQ_tY56kUFeW&IbBBQD0W7J$g3JOM)h z|7fN|?||2l>vN4o&E^=qu4={l+oKY;)4+X`sy-h5tGAR|S2ZxHCjxl@<*jeBM$}b0 zx7^WdjMOW}mAV_C{vmzI=cL!)iq+-7w#7B1rH>*jyhzz2&XW4%7BR1I#iWs3wEIp? zqP55hFH%;9`s!B21zZiGk+L%E5wb0=isBC6ccBI%?#^*a#;vG_@@FHc!g|C(s*A`jfMaqg7MaX(K5cd*c zVMYpzD@F*rHV{`8S>Z*>J{kC~tjs@=6<(yQ%pb4b8#;VNCX@&ZGg6pI^&KT-vWcwl zB4yukvS%f?h^GrzygiaD)7Wdaqg9#SA}hQ|S($xT%gU@2S>Z*>ZfAl-$U1+W72Q*2 zyvPbKQntZ)X=ZYZ#0KF?e2C=AT#u;9HMqn8kriH~tjztZWhEwvtneabC74CXIs<1# z$4QVA*-r7!^YuB=5`J!TPSq#xnlMAHpR>|le$BK0GUrhhqiidtBBURxQt3`;UP_G3 z`Ph*2%P-PxvR@pi(vz4vVOq3=2824>=Jl`tt=aa8Uh2GBHyZgty1OLxMoj1Pf?X>NVw*s`@ONseUguWQ+Jo;Rr`hxlf>hsH0z_|qHzu=^mJE?o} zY)Ivv@i8aK>09nRw5QO9ys>+TbAC@s{3&wF%Z+k_y4xxGd`Lw(`Fk^Bn13;2$~}*q zvo|H?1I{;G_hRrz1(Z{4rHlX zC;Pzg_)n;8N~NjnvfaaJIgpg(XZV#>Iol5OQdJvIsjO(`h*jmBqJk<%9qhs1PdE2- zLI+b~&QaCNmCp2o18m6ck4$o&TpVyt!ubcBYeza?A1t&XGE%Ku0?v#VQ)14;nK;t9 z_r;Q!Pf2bV>HPM^lK9U^{&l3MluokkET{AD670i6o%G+061TnmccWrGUsYDTlf5w6 zIqi>rz{O>=@S@l{H0YZ)2{6 zURrMBbuYd&-F~Iqje}0<%lS60b^FWD+iAm|P5+PSon$!gef3rQ>56A7f1jsfce&%B ztQxP5@Zsh5SB%u*-`Z0uo!`FpMeNJ2ZIw0O`E+fv)Ao8}?6q#kM9r7xCOZ@U5VA4A zLw|THc7tJD?_~cp*;#&MpZ(X7`u#iUK;6;O7P&;qu@mfI+8+idfknVf1LdF&G=kM& zJ2(JNf{P%7cu@*!z)a8t)`A_N4O{{#Tr-M5HJAyS!B(&@)*5b|An`Fs}f4aAx^G{+XoI#rG!i0Aqj1m$2VSO~&k6WAHQuIlz@-rwFS$G<|zwd63I zli(sqqo!g|ld!Jpx@Z12HEz7D;^hc|nQ)rGTCf%D14qDV5XGt@155yOz;dtw8~`Uk zeAiu7v(z)^0xI3V^ht+uSu>V{Ixwf}x~lirpFh;C8BOF6V=RZUm9m9u{b$YHWDO&S zaQ4AD2IpR4e=uer6XStWuGOgtGhseZDsx0xg*qutB^NAK-evo4sFZDla<#UWKr^6A zq505zoK+Y4bhC(`a){&^TDe3kW7RWXOi<~v%$GxSPvK87r~xw)*Ht~bCsBnurMq`T zMx+T=E7$=JA@bOs6m=mmUzV(L%mnYkx&%`2fP4@FQ^7*80Xzv#fR8~G%Z?0C0j7dR zuo`Ry`@lQkJV=xkJqS75-n(O6UG>AgRWRm1u+VK~Ih(QT8y0NbcN%7tvr|TnqRmOE;x$tomgJ~GD z5v&H=!2$3NI1d6iQ4myssh~N98U4Q6ldn#w99d_|A(N~X=5BBVoCFs^eD}Ry6sR}4 zRLKpL97J6!m&Ic_r~?bZO0Wa8fz#j;2(qv&2QxquXmzsx@z-^A8GEjiX8l!=G`j=t z5pWt@1c^Opp@;LumxVF^f)Vc@=;U3@vF{(KfBQo<#0g(aiTMfHKOLwatxzTLYe_#c z&|GZHswrBZuTb&!BLnr73N=3FK}7Zq)RRW2LVMppS<>j8BN(}d$p6DYmQKC(nGq^J z=?|tFfBiJv`Sji_HC!kCO!dB6{3brc?& zH^{m7Yj0YFMpN!r@NOKWr;mmQePFa&5VMuM{1Sa`v?__&MtVev&Z|}>YJ@Wg+b7-? zNRKiuH-(P)$G;*ur9}UxTII!A@P)^D&I4+I4nL-1Czvv=egWveQRcA{&mh)~4YM2O z-^)5rR(hS10?5nNPUL+VKVJOr%b_J(`c=*}SF=7+ojJDC+K|DfwJ8mY=S*#AZh|MR zU7)2Ilo9zMgZ1>WswDlSsiVxV0Qzg{xMi?@Y^>_teGdG0f$(oJ_2xK}f0e919;<@s zXYTxz`Uy)?T=y4&+=L@xjl_1UR9 z`!1E-Xp5W}3CFqA7Oz{cR~gJ2{oCuQw$@0+ zPf+=>H@j0uSt+vM)OBRpOpnSKYS}PBO|u^@*5@Xux%MB6-NmDBoQMRI;r5r)_3nvk zYi!;i>AkXw+^e;2oTMh;^m|{Nq`D{@kALF^HOa=?d)KL(6Q*L1DXwp_Ky}0ShB}pz zcO%(RT*fL&H)u9A2bu%*`Zt_j6}0!Q2A=2W$|`eS znwLBz-_%f`td&J@2XKyySp(Z^2v9>tdkq!v9vZBBC$Ps+V#=05S#(%K^uZfdkJzp5 zOj6cnS%kM-XM~1B#Y7d*u~0EVEp!CubKrK{IFt`@pdbtFv{HL}DftW$vo#ruN*d=5%xS3~9m=>rQ~T5Ud27z)o-o zybIELv;F~7!9uVaYz6zkF>nT0S;&E6Py=RyX3z?DgCpP!u!1aHL1_@@pGsmO*Z`gc zhxTUYsm|)*1uRnc6AO2g>bwOkMt7K)=&u<@%bG!->8;}Rk(*V9-oAkASe|h=v6E)qldW<>yY9(pIiayGjcU|**_4$d1l|qeEg&(Q#UH2uGe8sA z0GGzr7!w{31A)w zgUw(!IMH`kRi4_jT3vOY`7u2Cg(nRZ<#C_6=cj5@T1!ZxE5}w)4QnQ71{=VW;4nA| zE`gMO_&KNn^FSDE1^d7|;5-Omn;@tLGe9$F1y6!Q;54`dG79KI0kLT+iG^S_*a{AS z6W{`fFGN>R4W<>Yt9o(Ic6HT$KqIV`U^Cc>$XgFT#w7Y2ulvVH+0E<{MaP-}G0FPJ zNOzg9S3iblUPR`akp9=lSYJXX{YDMZmxS>Zj5Kc(To*r1#@A%zc)Q@#fHS7+@Z-1| zrQBu5AvvMMxyNx+1fQRqt|#nJp~B~BQ;r}wjDlwXUA8hnDX0N6LDRLealPj^>X^#& zH#5gSLHY`~- ze`&)#bzolo(uO(LH{9g{BG)l)qw6-CdcqE>ypLS-eCBE#y< zm1`9__x>Y2-RJpDSabvOop}0c1SL)J+Kq+1%ogqs) z)9h4TN{+t^nM_8M&UV~0#iz@!aB`%0#Qn?eOH5&*+(#wIj{zS8VHfHVRcdI@+-Ogf zMP&QIK21!eeyK_&>#bGHzf)}E6a}# z`+&%QUFhDj)qN0KeT`RigBZgcP1KTy$GTag?_RvPVRn*WvD*Ho=U3f49-@xJlo9#b{(A8km9w#ptMH~VDn8+!rll<0z0Ov$ zrQXLmc_2+^C}u#~!8B**qft7fxO!KL2`Ve%ycYYkH*8t=)ATx4>aI3d-ANv!*>cK= z{JH`9H;OySCR2yG47fFYpE`CA=(rV}+SzO1*@$+2fXu4{yj#I$>Zn6T_~dabxL)Vh zs*I$323ZslDt8t6dUCBAoK#@4h00Awfs?%|S%*8RD0@kP^T4X~=|hb~ITWScg={=@ z80Ru^WMM0lb~xv<2&;f5SY7y8BgmOJ1@}`fEg>9qaTmVGSgln5pU4# z*7@C-;`6Ne)`E8Nr}d|`s+V)}Tom^^mUXKu2GyD4RS%m$CO4Buw8}^jFT4}Bn0B7N zf4u6WKGa*rQ+Quny!@JLEopCKAe(A~+S|CGPa&3cA8ctusPynYop3#E5OBD8P5QCn z3YCceW4$F>^-!7m)9Wd_(r|@}l~(FgaAOM##SP3&Y2ijABvb}lsMqJ4t?yaWTzwXj zUs>qhw+`B7Su1c=>)()*A=vK9v&{gNMf_vX9O&avxij3M*TkrPYO(%gg6cK!-zhDs zJOx+c@o%AWt$7-HEtKm|m_fF7L1V3J^*>`&ru}%K_Y?DeGQ}2LKHa8Y&?_cl3xXE+ z%k?iA?#qTNz93Eg2j|k%A!rY%y-sIOt=u6NcQ0A&N6pBMz<*LOBb`xh@0X`D^tfE(0uY{LdQa7v}CH( zb6y8!75}Z>symf+ox5E%55`Xrm=Apj$_hE$3S9)%P^NcyGgK=474&Y-pV4ez_HF6M z^|;uIVW}Tu#WNfFfHXubE1K1)^gxD5W{*6aCPy1c!_|vH4VVdDaRc-C`-458iAJ^BhO8#$LpJB5A_ zu#0tM4$)mN{TF$o_#gdGCEeiuT-))c3z*57__={0s4HL(0DB7cof*$>xYq8`H zyT+sUdp)pzhy^9TKGyJUk5-v_v*W$8#8_fJS8XY`%b50lW07UqUj7(k$=U?({FKRm4Mkd{V5aH8Q^v%7jiz65 znGk+|u6{x<<3~bQ8Q=JevD7KkV5TvxGCh0`S&<)PhC&(3oihAEiHyGpj4`Gxz&GXm zpi!v5G3g>x(JnW0;ZC6^dFro|+B8k2lt#&VSz z`!zY90!i5(-DP^Z%1~u`{I>7qX6QaJiuW}Z`^pT_QA4ZDENSU(61AqsXN~j8L&jo} zzJ@+%oTuK<1mo4GI(u@@8M?;MdNTxNhW;?dlOvG3_1;3=B=voNR!J?}j3YIeaUW(H z-Db=_(OBj4{$Alvjk(Vjd*?3=^k`2LOU4+#Icu!)wi(_sQ%_I7GoIC3tjWeR$Cw#V zU>Zs=1$!F)L8DNEQShKqaD|GUI&QC|Y3T4*FBfgllCiGAPco(Ei>YU1Q|eiQ=?xEi!&Ezn>>? z)HL+DH%`_~rsvUSs5W--uW{UmLDBy2TBpJucGzuLzGisNq@ADoe2xS`$ z86vkQi_F-qFp6aw#kQESEHf6l$tbwRIM;3Nm=Z0G53tg7>-)g?)-7hrZ#0Vc&oe>j zJ>x|Fo=$`Dfo(?fugq9}V8-%2UgOJ$}zvEWwQRbEYG^%=waQymm6(IKcRC zGn&_%o{TYLx5fy5WybWfub?@<$ynqmqv$P0kpe^an?N-v!E5jlQ*N0VqF1CG?OSE0 zhZ}uU8U@}qV|Lk?Qud(40KvH}T>XGi0BbG4E?SavYy>=YPF% zp6N}u z(-B6qMP@dXb@CdhFY@R*)04}F7MLC{GN#>c8k}e@(LIgj78$wwO3Ndr`B|gLK{G9v7$=-)Xsl6Wn;C*#rl+qMCw$77e1vImiLvk?)1hCtn6X@A zG=JN~_GM;l-!_UZGQRMHsd%HY)G`w}|6+#ZepB%iiC)KQ&Cq^j%H3uZK5J$}iyCB1 zYXrBMhL;6QzA@oVM(#G#@GxWYUz>)XFmjW93!3`+`vJ($H$!uq7blqiCIa4MOf<+i zn=zwer0^(HA5dUbiSb~=qdi18N#EcL$#(uHyK4&xE*5rN0@clDr1u8%=Ej- z8s8Q)A-SjQrc?vUHVmrhKO9;A=+i15u3jt!OjmmyL!W7*nk< z(`k_3b2Dw~jb#c<4_`AwQfm}jWE6VaOxIYWP*1}jVfas=pgaH98G-wark72iS?7(B zb=C|~cVmIqj2G`W3Vv$n56vuCWy()99ecubOc{lanj!ck&C>sVTJ>a`hnwViK}cd? zRdm3Li;HTDVqT`%%1W$;Df~qE!9+_%+o3orp!4pVKZ&EPkR(HRd>9c)2MoW)j&k=% zBrgQQ!JxHD1+1UK=Ln@?(ZsO3D;D+y$W=_0LQ?^X`xOL2dj1D$c*`^^92E*ums=%T z1Q0?z(Xv5^dCbw87_zKjm{dskG=su+q7@9GrGErle`Jk{<)$Q2j&5JyF)hPAC!U+kheY>!E&$~oBrbx6{3Pf4VVgMf@ZK1w1UlG2RH&wgY!V9w@gQQt-2i4ff-;Pke4gMU@h1V zc7g-ou-y1=72`96+D^3%fS0c z90JF{yWk9vANb=z8Yl)eU@Gum4cJV2H)sP#fV>_M;L?=>f}jXggF0Rj$a?r34|r7M z+r2uK6!U0#zFk0~Wbc2TaQ=-PgUj=heGPPy0-j@4a|YEss*U^44T8 z-FjI?bDaG!Q=_Y+0X7N<45m`tu%hfYODn)O(qPn(M(@@+Y zBS9}$9`Vo0bd#o1%{>Q;o<>qGzr?^^NM$(I<@S zn`R%^-zZ%7fxwf+EBlU z!D{cC$1`2S*oCIru$18)%WFGSn%!Y$3C+11FWY@OxN|zV<;2olXXe2kx=z{g9U=`K zA`*IY*T0ye69(9wGu<=aFmpQ$BQM(J>Rrn2Fw9&A+qav|TU&MMb$#n`j|>a-2X~A`6Q=89 zO}TsaT@6j6?_RX1e({`kQ+hnll(X?DfBX*M+I{qzu6D1U?N#DLelMotvVHWyu5_}U zjsN(i54-G7zEv9E@h3$H_v)j0Nvcm=d+GAMlM?OcZ57m2*HCNF^rM_w{YGV364Xn+ z#g3TnJ6*PfgiJT-*MJN75kY=C4C-ykc2-9N_<+ye;j$$nWV%Ve27JKpSv5TiYNmXz zjv5$zzh?(r_Q3#C*-e@nhT#ByBeI+c>J=#wIt;@B{2KPT?2{vzp2t#fMBfm@N;+i9 znR~(ZpwcEAOyK)4UKA3e$S35cSf}67>Rw9-p{X)!5Kh!K_=3=AncJi2Z zc6|qXtFW&MHC~?QM8jrv80&;vl^bdjQ|+jZzAz-$nK>IzCKbR=c7*t0jQ;u;XieE7dbXzD@x`MKIzeCBIHD-?LObQ`DEgAo3D4l5cX8ezVL- z-*4s+8G@EPKQ`u`+4YSL9WNxwuXtR#UB0P0Vyd2&dNjR*Peami)hpNWIDmyYnBCMI=`ekzhZJ7PkA?6OZqRz5qzUFI;Mb9B$%1UtX- z*+lf-_N0L7E3v4T-kHbb=xg+z8*!};)2+VxXda5Sv$3o{RWG<~)z3~I($0=BU_RaI zdzAsbJkNl0>-G44_CxwoH+$wpe}H#VXV(Antg=7ao}5=vS;R<`(rA{uFze|iO|Rrt zI)5~F>Mat1=X4ch1=H_{p9*W=jUMt@y$+Bt}&u^Mvzi|Hd^{t<)giJ5f z2;+r*nB5@4UYK>0M$e(dEWbWklx6AcE<{N;>5D{!DQ=e$kx<*yP5L4c3y0PE6oEQ( zH4)eE;7|t6cds_d|8|^pv;3MO2Cp->bD&Y3^FWbv_$(Ma;C)&N{Eyu1Fnet!9AaIFDyAF|271eVC}v z7u#j}sbaf-YMJ$p>+w_xg8hp^X6Tmg7YQz z+|)i+BC}AA6rG z%1wi>8;9Bb^xdWQ=+u&S?Q39)KtKerO`1MgYG0Sy-~Hqd`PLa~5`p~7UiapvR#^V) z$Ma0>``p^EvorN;Wp-KWAZw+REyimUfk8v;+SGhYLWmsIP^tYLsl9cGy*PDj zyUipV3a_TsQ!Q7Q549^(tKGdb^4;gDMBt(s*Id1Gs68rm)OTul$BbRBE-FW$=sN<_ zT+@r@O|kR!!5jGoiW@lN$qFJgqC9}6H^Lr5_`D@T`?S2 z9^if%N(4@u+RIIk`s(*8?127Mr21N65#jL1WvA%CsJl|>`ko4VU~1lXMz2OZ+n1_M zEofJ_nW{va8fnb+uGu5(!Kv4M$3_?1-S3YhaK9n$$Du@#v?#BJX4i<<;lN`n?c&ri z?lzeS$P3!iME=il@X>aD*U<~-H!N?f2p-Rh^0SKIv18RpqbYoO0z*T+wadaGO^9W%z})*yT%*1AL2kKyAS zGsf6m^$TO|&fTtr$(FVRM1-55?=V$GLjmAaXtQw6S)VI~Vv&ESY8vpv3_u$F{iWnnPJb+#P7Yi#F%} zp|Io6zE#e676OXa_rqH#Eq4DN8w^ZGzbGG(^XqVj@m6@O7Tm+OdPMM|-Omnn@c3!V z9P(W2L9NEwy`s-iyuj;O<2ZW=tqvyI#_4tA?C#yH@CZ)Wq;wDL6V@ljVc<0DA@av+ zRbzMWq^uKqat+svx*B^*Qn(*iSN^*Pb%*ut8aq#=>Hk7RDg9-QU7i%)iT~alDHN); zZ&zu1e^qPW7mW^2XY;naerl54V{hpV_U0(Pdy1W=p4LaFpt8K+)>j{&f&S-GrPxu~6$VxAB(uEaK9b2^QoeK2*Grx!ncyWalT7uJ$*d|(ZjhwO9YWI7P}?CO z-&IKQiY*{n>?I#1Im}D`kz|~ge2-+Umz1w56nV)TN&d-8=Cl0l?j=Xa-LsdJ4=GIX zl8=#W^^$T2(Z@^5X9dc<?52B3`2gMBUQ#}wHs4Fim(z@v6G@Kqa^ti;Z1Lil$3SsG_??PochrOR22Nb(8H%3JBjSaQ4Rs#|To`83B) z={1e>fLWG)!+|ItM*ilTJS$KCV2(Xezct66&~iILP>@X=O5`H&0#ZIM5UBn}5GjOy z4)1j?0D`w^R(^eq#2oThNWdXf`NwkPG9oY@Z3OZ#!A9Eqc{DMfKh_iqWm5Pln1VYj z`S9}fdsFAy%hld5@3j9GrR(Mq!){$)uQ42b_Vm345cP>{#2`IX+t7(PRglV`Bq*pI&CK4YXvSIPPzufo1HgWW|za8M{N}pbGW|+>h^Bv(SROFY71@n%gGMc8z~pWsWByeY$~mnHbiOnP+nR zhi@UK_RpU2-W}L$mv6@`R;-6Sgb$$6-6oKA)yzR@ix|DbylMXZbi5@!i@) z$m?Y3_gC4yRg7M=${ral_PVHdt+EHkWRuLX^hYb~5}p4ed!9V0?fxb|Xz#`!+4tDd cZ*u;IPFQ8nURQk}PG0|t2MLO=b$_A$FKqx#x&QzG diff --git a/Pepperdash Core/Pepperdash Core/bin/manifest.info b/Pepperdash Core/Pepperdash Core/bin/manifest.info index c4b0216..dde690b 100644 --- a/Pepperdash Core/Pepperdash Core/bin/manifest.info +++ b/Pepperdash Core/Pepperdash Core/bin/manifest.info @@ -1,4 +1,4 @@ -MainAssembly=PepperDash_Core.dll:1cb57e7d4dc5c0e9b66ba4c496fb831f +MainAssembly=PepperDash_Core.dll:9f208dcbcc49e496f38e91289aee13c4 MainAssemblyMinFirmwareVersion=1.007.0017 MainAssemblyResource=SimplSharpData.dat:315526abf906cded47fb0c7510266a7e ü diff --git a/Pepperdash Core/Pepperdash Core/bin/manifest.ser b/Pepperdash Core/Pepperdash Core/bin/manifest.ser index 3079acb16129184071e339e6ff7d97aa1f74acb6..ecf2682e2b16da5ee369609016999c2bb1d269d1 100644 GIT binary patch delta 644 zcmV-~0(G{2b{Ne82!NV-ickfO2spacxT~CLxf0?!O!7raz)2!4MCy##L z-}mM3`};mA+9&Jj+r0gKf8Q0qGoyF5n_{sln|W5Rwx{$uwSTnVr6=(ZCdJZx+9k`= ze3dU}`Epw1%}0;EXGnT4B5D@(^SjxNwrvI(^g?9f%5F(!%wqpFQ0yT zKg)Ix9vtKkrVnR35A%BuvV(`8`UKhxP@3Hy>@Z;;ZSLr2ndp7`et-1QtGwai@t?nB zWGKELQv5YKe1DA&Pu5LaEsoo^E+*?XZ_bu&UY}=EGlPabr~8xr+5YtY?!(Ea_wQ%t z4~cz0&1chWZ}#b@lZQU_Zx1|}iCc8BVJ2?h>Hmvn<^IsDd^;}*@W5PT`Ru`7KH154 zAKt(JFuQkt|I-IM2b284r~CW&XVY1HF5)1A8Mp=DTYt?!ysQ5g(f!jQx_k26VgH?n z)BCe~J2RruY<7O|@c#7Pr`dFZ@$Jm+$4TCU*5UUXVcv?`yFmMo{ri)L4-fY9Pao_b98C7&6dwi~D*c;*--`6Z-Tl94 z4i1Lq;C=N^Jm08i&UdEwcka(-`E+)WJvg{G+n+qRzqk9~{?6`nGI=mC1%pt78Mp=P zTg|{=Z$I}F(D}ej$HSrNc$&4@c$T$p0`3uC?tPj~$P#`!o#nIr2j`QW>4W>bJA0pg enmx$<3HU&tFoMP}`Tj5YCI1gU*CCrb3jhG#M{@1} delta 642 zcmV-|0)73q2DAo{y??kr-hHt1=?fA;}>{cVDT&!&_6 z5Ap}I{n_;XbSHl}`SjCCwm;o}`04rN;NI>zwR~Nz>*+A|FSB+&_~r9znw8q(Q!G|xGtcVP_LN?ymVfrU^d$blq*$6yyJUHq zukz(AUrvj>`RLL23`y^WBz=)zwbinz&fD>Knrb;dsTQkj+A0hsP@X+}_-U5y<+@`CW>CrWaJoO)pY2cY?-FO;zn`5y zB=-F@pG~v98FA`EpZd249?Zloy4Wxix9{}-MYD2$XjZ~U@xESGpMX7}SH??LPE`;9PfMeSZM|1To+gCRn{%FoMu+LFl} zVDkLl`T0RUn@qBU{pob}VE6w0$-{>S`}wC2_74swdvS^ngAJAb&A@L(`r+>WUo-~? zLv!%@Cwrc6)HCNh)B8L3XR~}dJIEd!+?(xB9^BvCeQW;z}YO~=!$&Bn8=brW!p_;T;lY(kds)9Eaq?LRo5>`Wir-`&~!^waD? c?oYr6`h*cQe#!TL$uIeT0ROa3D?1AS0K6x8TL1t6 diff --git a/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.dll b/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.dll index 3c782b2fd4521f63fd31554fdbeaa43ac9c11d4d..bc85983e4ea789e333662ec308db444be62a9b8f 100644 GIT binary patch literal 86528 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 delta 27113 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 diff --git a/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.pdb b/Pepperdash Core/Pepperdash Core/obj/Debug/PepperDash_Core.pdb index 8b58d9d99b618528a6999653d84b53a21b3f5f0a..c0dc85da82281d5b442fd070a2408f0a36431ec9 100644 GIT binary patch delta 46436 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 BDrNux delta 32322 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