diff --git a/CLZ Builds/PepperDash_Core.clz b/CLZ Builds/PepperDash_Core.clz index 9e60219..57de2cc 100644 Binary files a/CLZ Builds/PepperDash_Core.clz and b/CLZ Builds/PepperDash_Core.clz differ diff --git a/CLZ Builds/PepperDash_Core.dll b/CLZ Builds/PepperDash_Core.dll index 63c9a8f..14b07ee 100644 Binary files a/CLZ Builds/PepperDash_Core.dll and b/CLZ Builds/PepperDash_Core.dll differ diff --git a/CLZ Builds/PepperDash_Core.xml b/CLZ Builds/PepperDash_Core.xml new file mode 100644 index 0000000..44e8d98 --- /dev/null +++ b/CLZ Builds/PepperDash_Core.xml @@ -0,0 +1,2137 @@ + + + + PepperDash_Core + + + + + An embedded JsonToSimpl master object. + + + + + SIMPL+ can only execute the default constructor. If you have variables that require initialization, please + use an Initialize method + + + + + + + + + + + + + + + + + + + After save operation on JSON master happens, send it to server + + + + + + The core event and status-bearing class that most if not all device and connectors can derive from. + + + + + Base constructor for all Devices. + + + + + + Gets this device ready to be used in the system. Runs any added pre-activation items, and + all post-activation at end. Classes needing additional logic to + run should override CustomActivate() + + + + + Called in between Pre and PostActivationActions when Activate() is called. + Override to provide addtitional setup when calling activation. Overriding classes + do not need to call base.CustomActivate() + + true if device activated successfully. + + + + Call to deactivate device - unlink events, etc. Overriding classes do not + need to call base.Deactivate() + + + + + + Helper method to check object for bool value false and fire an Action method + + Should be of type bool, others will be ignored + Action to be run when o is false + + + + + + + + + A bandaid client that monitors whether the server is reachable + + + + + Timer to operate the bandaid monitor client in a loop. + + + + + + + + + + + + + + + constructor S+ Does not accept a key. Use initialze with key to set the debug key on this device. If using with + make sure to set all properties manually. + + + + + constructor with debug key set at instantiation. Make sure to set all properties before listening. + + + + + + Contstructor that sets all properties by calling the initialize method with a config object. + + + + + + Disconnects all clients and stops the server + + + + + Initialize Key for device using client name from SIMPL+. Called on Listen from SIMPL+ + + + + + + Start listening on the specified port + + + + + Stop Listeneing + + + + + Disconnects Client + + + + + + Disconnect All Clients + + + + + Broadcast text from server to all connected clients + + + + + + Not sure this is useful in library, maybe Pro?? + + + + + + + Secure Server Socket Status Changed Callback + + + + + + + + Secure TCP Client Connected to Secure Server Callback + + + + + + + Secure Received Data Async Callback + + + + + + + + Private Event Handler method to handle the closing of connections when the program stops + + + + + + Starts the monitor client cycle. Timed wait, then call RunMonitorClient + + + + + + + + + + + + + + + On monitor connect, restart the operation + + + + + If the client hangs, add to counter and maybe fire the choke event + + + + + Event for Receiving text + + + + + Event for client connection socket status change + + + + + Event for Server State Change + + + + + For a server with a pre shared key, this will fire after the communication is established and the key exchange is complete. If no shared key, this will fire + after connection is successful. Use this event to know when the client is ready for communication to avoid stepping on shared key. + + + + + A band aid event to notify user that the server has choked. + + + + + 3 by default + + + + + Text representation of the Socket Status enum values for the server + + + + + Bool showing if socket is connected + + + + + S+ helper for IsConnected + + + + + Bool showing if socket is connected + + + + + S+ helper for IsConnected + + + + + Number of clients currently connected. + + + + + Port Server should listen on + + + + + S+ helper for Port + + + + + 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 + + + + + S+ helper for requires shared key bool + + + + + 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 + + + + + Heartbeat Required bool sets whether server disconnects client if heartbeat is not received + + + + + S+ Helper for Heartbeat Required + + + + + Milliseconds before server expects another heartbeat. Set by property HeartbeatRequiredIntervalInSeconds which is driven from S+ + + + + + Simpl+ Heartbeat Analog value in seconds + + + + + String to Match for heartbeat. If null or empty any string will reset heartbeat timer + + + + + Defaults to 2000 + + + + + Private flag to note that the server has stopped intentionally + + + + Privates * + + + + SIMPL+ default constructor. + + + + + Sets up class - overriding methods should always call this. + + + + + + Adds a child "module" to this master + + + + + + Called from the child to add changed or new values for saving + + + + Events * + + + + Mirrors the Unique ID for now. + + + + + Merely for use in debug messages + + + + + This will be prepended to all paths to allow path swapping or for more organized + sub-paths + + + + + This is added to the end of all paths + + + + + Enables debugging output to the console. Certain error messages will be logged to the + system's error log regardless of this setting + + + + + Ushort helper for Debug property + + + + Privates * + + + + SIMPL+ default constructor. + + + + + Read, evaluate and udpate status + + + + + Sets the filepath as well as registers this with the Global.Masters list + + + + + Call this before doing anything else + + + + + + + + + Set the JPath to evaluate for a given bool out index. + + + + + Set the JPath for a ushort out index. + + + + + Set the JPath for a string output index. + + + + + Evalutates all outputs with defined paths. called by S+ when paths are ready to process + and by Master when file is read. + + + + + Processes a bool property, converting to bool, firing off a BoolChange event + + + + + Processes the given path. + + JPath formatted path to the desired property + The string value of the property, or a default value if it + doesn't exist + This will return false in the case that EvaulateAllOnJsonChange + is false and the path does not evaluate to a property in the incoming JSON. + + + + Called from Master to read inputs and update their values in master JObject + Callback should hit one of the following four methods + + + + + Called during Process(...) to get the path to a given property. By default, + returns PathPrefix+path+PathSuffix. Override to change the way path is built. + + + + + Use a callback to reduce task switch/threading + + + + + This will be prepended to all paths to allow path swapping or for more organized + sub-paths + + + + + This is added to the end of all paths + + + + + + + + + + Defaults to Environment.NewLine; + + + + + This is something of a band-aid callback. If the client times out during the connection process, because the server + is stuck, this will fire. It is intended to be used by the Server class monitor client, to help + keep a watch on the server and reset it if necessary. + + + + + Semaphore on connect method + + + + + Flag Set only when the disconnect method is called. + + + + + private Timer for auto reconnect + + + + + Used to force disconnection on a dead connect attempt + + + + + Internal secure client + + + + + Just to help S+ set the key + + + + + Handles closing this up when the program shuts down + + + + + Connect Method. Will return if already connected. Will write errors if missing address, port, or unique key/name. + + + + + + + + + + Internal call to close up client. ALWAYS use this when disconnecting. + + + + ff + Called from Connect failure or Socket Status change if + auto reconnect and socket disconnected (Not disconnected by user) + + + + + Receive callback + + + + + + + + + + + + General send method + + + + + + + + + + SocketStatusChange Callback + + + + + + + Helper for ConnectionChange event + + + + + Helper to fire ClientReadyForCommunications event + + + + + For a client with a pre shared key, this will fire after the communication is established and the key exchange is complete. If you require + a key and subscribe to the socket change event and try to send data on a connection the data sent will interfere with the key exchange and disconnect. + + + + + Address of server + + + + + Port on server + + + + + S+ helper + + + + + Bool to show whether the server requires a preshared key. This is used in the DynamicTCPServer class + + + + + S+ helper for requires shared key bool + + + + + 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 + + + + + flag to show the client is waiting for the server to send the shared key + + + + + Defaults to 2000 + + + + + Bool showing if socket is connected + + + + + S+ helper for IsConnected + + + + + Bool showing if socket is ready for communication after shared key exchange + + + + + S+ helper for IsReadyForCommunication + + + + + Client socket status Read only + + + + + Contains the familiar Simpl analog status values. This drives the ConnectionChange event + and IsConnected would be true when this == 2. + + + + + Status text shows the message associated with socket status + + + + + bool to track if auto reconnect should be set on the socket + + + + + S+ helper for AutoReconnect + + + + + Milliseconds to wait before attempting to reconnect. Defaults to 5000 + + + + + Band aid delegate for choked server + + + + + An incoming communication stream + + + + + Represents a device that uses basic connection + + + + + For IBasicCommunication classes that have SocketStatus. GenericSshClient, + GenericTcpIpClient + + + + + + + + + + This delegate defines handler for IBasicCommunication status changes + + Device firing the status change + + + + + + + + + + Stupid S+ Constructor + + + + + + + + + + Stupid S+ Constructor + + + + + + + + + + + Gets a level or creates it if not existing + + + + + + + Adds a file master. If the master's key or filename is equivalent to any existing + master, this will fail + + New master to add + + + + + Gets a master by its key. Case-insensitive + + + + Privates * + + + + SIMPL+ default constructor. + + + + + Loads in JSON and triggers evaluation on all children + + + + + + Loads JSON into JsonObject, but does not trigger evaluation by children + + + + + + + + + + + This is something of a band-aid callback. If the client times out during the connection process, because the server + is stuck, this will fire. It is intended to be used by the Server class monitor client, to help + keep a watch on the server and reset it if necessary. + + + + + Semaphore on connect method + + + + + Flag Set only when the disconnect method is called. + + + + + private Timer for auto reconnect + + + + + Used to force disconnection on a dead connect attempt + + + + + Internal secure client + + + + + Just to help S+ set the key + + + + + Handles closing this up when the program shuts down + + + + + Connect Method. Will return if already connected. Will write errors if missing address, port, or unique key/name. + + + + + + + + + + Internal call to close up client. ALWAYS use this when disconnecting. + + + + ff + Called from Connect failure or Socket Status change if + auto reconnect and socket disconnected (Not disconnected by user) + + + + + Receive callback + + + + + + + + + + + + General send method + + + + + + + + + + SocketStatusChange Callback + + + + + + + Helper for ConnectionChange event + + + + + Helper to fire ClientReadyForCommunications event + + + + + For a client with a pre shared key, this will fire after the communication is established and the key exchange is complete. If you require + a key and subscribe to the socket change event and try to send data on a connection the data sent will interfere with the key exchange and disconnect. + + + + + Address of server + + + + + Port on server + + + + + S+ helper + + + + + Bool to show whether the server requires a preshared key. This is used in the DynamicTCPServer class + + + + + S+ helper for requires shared key bool + + + + + 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 + + + + + flag to show the client is waiting for the server to send the shared key + + + + + Defaults to 2000 + + + + + Bool showing if socket is connected + + + + + S+ helper for IsConnected + + + + + Bool showing if socket is ready for communication after shared key exchange + + + + + S+ helper for IsReadyForCommunication + + + + + Client socket status Read only + + + + + Contains the familiar Simpl analog status values. This drives the ConnectionChange event + and IsConnected would be true when this == 2. + + + + + Status text shows the message associated with socket status + + + + + bool to track if auto reconnect should be set on the socket + + + + + S+ helper for AutoReconnect + + + + + Milliseconds to wait before attempting to reconnect. Defaults to 5000 + + + + + Band aid delegate for choked server + + + + + + + + + + + + + + + For Simpl+ + + + + + True when user is found + + + + + For stupid S+ + + + + + + + + + + + For newer >=2.4.1 array lookups. + + + + + + + + + + + + + + + + + + + Provides the path append for GetFullPath + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stores the state of the request + + + + + Waithandle for main thread. + + + + + + + + + + For Simpl+ + + + + + True when the preset is found + + + + + S+ helper for stupid S+ + + + + + Set only when the disconnect method is called. + + + + + Just to help S+ set the key + + + + + Handles closing this up when the program shuts down + + + + + General send method + + + + + This is useful from console and...? + + + + + + + + + + + + + + + + + + + + Address of server + + + + + Port on server + + + + + Another damn S+ helper because S+ seems to treat large port nums as signed ints + which screws up things + + + + + Defaults to 2000 + + + + + + + + + + + + + + + S+ helper for IsConnected + + + + + + + + + + Contains the familiar Simpl analog status values. This drives the ConnectionChange event + and IsConnected with be true when this == 2. + + + + + + + + + + + + + + + + + + + + S+ helper for AutoReconnect + + + + + Milliseconds to wait before attempting to reconnect. Defaults to 5000 + + + + + + + + + + Defaults to 32768 + + + + + Defaults to true + + + + + Defaults to 5000ms + + + + + Creates or gets a debug context + + + + + + + Do not use. For S+ access. + + + + + Used to save memory when shutting down + + + + + + Callback for console command + + + + + + Sets the debug level + + Valid values 0 (no debug), 1 (critical), 2 (all messages) + + + + Prints message to console if current debug level is equal to or higher than the level of this message. + Uses CrestronConsole.PrintLine. + + + Console format string + Object parameters + + + + Appends a device Key to the beginning of a message + + + + + Writes the memory object after timeout + + + + + Writes the memory - use SaveMemoryOnTimeout + + + + + + + + + + Helper to get the file path for this app's debug memory + + + + + Describes the folder location where a given program stores it's debug level memory. By default, the + file written will be named appNdebug where N is 1-10. + + + + + Defines the string event handler for line events on the gather + + + + + + Attaches to IBasicCommunication as a text gather + + + + + For receive buffer + + + + + Delimiter, like it says! + + + + + Fires up a gather, given a IBasicCommunicaion port and char for de + + + + + + + + + + + + + + Disconnects this gather from the Port's TextReceived event. This will not fire LineReceived + after the this call. + + + + + Handler for raw data coming from port + + + + + + + + + + + + Deconstructor. Disconnects from port TextReceived events. + + + + + Event that fires when a line is received from the IBasicCommunication source. + The event merely contains the text, not an EventArgs type class. + + + + + The communication port that this gathers on + + + + + Default false. If true, the delimiter will be included in the line output + events + + + + Privates * + + + + SIMPL+ default constructor. + + + + + Read, evaluate and udpate status + + + + + Returns the FileInfo object for a given path, with possible wildcards + + + + + + + + + + + + + + + + + + Sets the filepath as well as registers this with the Global.Masters list + + + + + + + + + + A bandaid client that monitors whether the server is reachable + + + + + Timer to operate the bandaid monitor client in a loop. + + + + + + + + + + + + + + + constructor S+ Does not accept a key. Use initialze with key to set the debug key on this device. If using with + make sure to set all properties manually. + + + + + constructor with debug key set at instantiation. Make sure to set all properties before listening. + + + + + + Contstructor that sets all properties by calling the initialize method with a config object. + + + + + + Disconnects all clients and stops the server + + + + + Initialize Key for device using client name from SIMPL+. Called on Listen from SIMPL+ + + + + + + Start listening on the specified port + + + + + Stop Listeneing + + + + + Disconnects Client + + + + + + Disconnect All Clients + + + + + Broadcast text from server to all connected clients + + + + + + Not sure this is useful in library, maybe Pro?? + + + + + + + Secure Server Socket Status Changed Callback + + + + + + + + Secure TCP Client Connected to Secure Server Callback + + + + + + + Secure Received Data Async Callback + + + + + + + + Private Event Handler method to handle the closing of connections when the program stops + + + + + + Starts the monitor client cycle. Timed wait, then call RunMonitorClient + + + + + + + + + + + + + + + On monitor connect, restart the operation + + + + + If the client hangs, add to counter and maybe fire the choke event + + + + + Event for Receiving text + + + + + Event for client connection socket status change + + + + + Event for Server State Change + + + + + For a server with a pre shared key, this will fire after the communication is established and the key exchange is complete. If no shared key, this will fire + after connection is successful. Use this event to know when the client is ready for communication to avoid stepping on shared key. + + + + + A band aid event to notify user that the server has choked. + + + + + 3 by default + + + + + Text representation of the Socket Status enum values for the server + + + + + Bool showing if socket is connected + + + + + S+ helper for IsConnected + + + + + Bool showing if socket is connected + + + + + S+ helper for IsConnected + + + + + Number of clients currently connected. + + + + + Port Server should listen on + + + + + S+ helper for Port + + + + + 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 + + + + + S+ helper for requires shared key bool + + + + + 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 + + + + + Heartbeat Required bool sets whether server disconnects client if heartbeat is not received + + + + + S+ Helper for Heartbeat Required + + + + + Milliseconds before server expects another heartbeat. Set by property HeartbeatRequiredIntervalInSeconds which is driven from S+ + + + + + Simpl+ Heartbeat Analog value in seconds + + + + + String to Match for heartbeat. If null or empty any string will reset heartbeat timer + + + + + Defaults to 2000 + + + + + Private flag to note that the server has stopped intentionally + + + + + Describes the folder location where a given program stores it's debug level memory. By default, the + file written will be named appNdebug where N is 1-10. + + + + + The name of the file containing the current debug settings. + + + + + When true, the IncludedExcludedKeys dict will contain keys to include. + When false (default), IncludedExcludedKeys will contain keys to exclude. + + + + + Used to save memory when shutting down + + + + + + Callback for console command + + + + + + Sets the debug level + + Valid values 0 (no debug), 1 (critical), 2 (all messages) + + + + + + + + + Prints message to console if current debug level is equal to or higher than the level of this message. + Uses CrestronConsole.PrintLine. + + + Console format string + Object parameters + + + + Logs to Console when at-level, and all messages to error log, including device key + + + + + Logs to Console when at-level, and all messages to error log + + + + + Logs to both console and the custom user log (not the built-in error log). If appdebug level is set at + or above the level provided, then the output will be written to both console and the log. Otherwise + it will only be written to the log. + + + + + + + + Logs to both console and the custom user log (not the built-in error log). If appdebug level is set at + or above the level provided, then the output will be written to both console and the log. Otherwise + it will only be written to the log. + + + + String.format string + Parameters for substitution in the format string. + + + + Prints to log and error log + + + + + + + Writes the memory object after timeout + + + + + Writes the memory - use SaveMemoryOnTimeout + + + + + + + + + + Helper to get the file path for this app's debug memory + + + + + Reads the config file, checks if it needs a merge, merges and saves, then returns the merged Object. + + JObject of config file + + + + + + + + + + + Merges the contents of a base and a delta array, matching the entries on a top-level property + given by propertyName. Returns a merge of them. Items in the delta array that do not have + a matched item in base array will not be merged. Non keyed system items will replace the template items. + + + + + Helper for using with JTokens. Converts to JObject + + + + + Merge o2 onto o1 + + + + + + + Queue to temporarily store received messages with the source IP and Port info + + + + + Enables the UDP Server + + + + + Disabled the UDP Server + + + + + Recursive method to receive data + + + + + + + This method gets spooled up in its own thread an protected by a CCriticalSection to prevent multiple threads from running concurrently. + It will dequeue items as they are enqueued automatically. + + + + + General send method + + + + + + + + + + + + + + + + This event will fire when a message is dequeued that includes the source IP and Port info if needed to determine the source of the received data. + + + + + + + + + + Address of server + + + + + Port on server + + + + + Another damn S+ helper because S+ seems to treat large port nums as signed ints + which screws up things + + + + + Indicates that the UDP Server is enabled + + + + + Defaults to 2000 + + + + + Stupid S+ Constructor + + + + + Defaults to 32768 + + + + + + + + + + Typical constructor. + + + + + S+ Constructor - Must set all properties before calling Connect + + + + + Just to help S+ set the key + + + + + Handles closing this up when the program shuts down + + + + + Connect to the server, using the provided properties. + + + + + Disconnect the clients and put away it's resources. + + + + + Anything to do with reestablishing connection on failures + + + + + Handles the keyboard interactive authentication, should it be required. + + + + + Handler for data receive on ShellStream. Passes data across to queue for line parsing. + + + + + Error event handler for client events - disconnect, etc. Will forward those events via ConnectionChange + event + + + + + Helper for ConnectionChange event + + + + + + + + + + + Event that fires when data is received. Delivers args with byte array + + + + + Event that fires when data is received. Delivered as text. + + + + + Event when the connection status changes. + + + + + Address of server + + + + + Port on server + + + + + Username for server + + + + + And... Password for server. That was worth documenting! + + + + + True when the server is connected - when status == 2. + + + + + S+ helper for IsConnected + + + + + + + + + + Contains the familiar Simpl analog status values. This drives the ConnectionChange event + and IsConnected with be true when this == 2. + + + + + Determines whether client will attempt reconnection on failure. Default is true + + + + + Will be set and unset by connect and disconnect only + + + + + S+ helper for AutoReconnect + + + + + Millisecond value, determines the timeout period in between reconnect attempts. + Set to 5000 by default + + + + + Fired when connection changes + + + + + Background class that manages debug features for sockets + + + + + Sets up the backing class. Adds console commands for S#Pro programs + + + + + Helper for socket list, to show types + + + + + + + + + + + + + + + + diff --git a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj index 8a033a2..548590e 100644 --- a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj +++ b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj @@ -42,6 +42,7 @@ 512 true true + bin\PepperDash_Core.xml diff --git a/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs b/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs index 63fe3d0..509f8ee 100644 --- a/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs +++ b/Pepperdash Core/Pepperdash Core/Properties/AssemblyInfo.cs @@ -4,4 +4,4 @@ [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Pepperdash_Core")] [assembly: AssemblyCopyright("Copyright © PepperDash 2019")] -[assembly: AssemblyVersion("1.0.21.*")] +[assembly: AssemblyVersion("1.0.22.*")]