Updates Assembly version to 1.0.0 to allow CI pipeline to set. Adds new constructor for GenericTcpIpClient that only takes a key.

This commit is contained in:
Neil Dorin
2019-10-02 15:57:59 -06:00
parent 41b79cc639
commit 765bc4392a
3 changed files with 201 additions and 178 deletions

View File

@@ -163,9 +163,17 @@ namespace PepperDash.Core
CTimer RetryTimer; CTimer RetryTimer;
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <param name="address"></param>
/// <param name="port"></param>
/// <param name="bufferSize"></param>
public GenericTcpIpClient(string key, string address, int port, int bufferSize) public GenericTcpIpClient(string key, string address, int port, int bufferSize)
: base(key) : base(key)
{ {
Hostname = address; Hostname = address;
Port = port; Port = port;
BufferSize = bufferSize; BufferSize = bufferSize;
@@ -190,6 +198,21 @@ namespace PepperDash.Core
//Client.SocketStatusChange += Client_SocketStatusChange; //Client.SocketStatusChange += Client_SocketStatusChange;
} }
/// <summary>
///
/// </summary>
/// <param name="key"></param>
public GenericTcpIpClient(string key)
: base(key)
{
CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler);
AutoReconnectIntervalMs = 5000;
BufferSize = 2000;
}
/// <summary>
/// Default constructor for S+
/// </summary>
public GenericTcpIpClient() public GenericTcpIpClient()
: base("Uninitialized TcpIpClient") : base("Uninitialized TcpIpClient")
{ {

View File

@@ -1,178 +1,178 @@
using System; using System;
//using System.IO; //using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using Crestron.SimplSharp; using Crestron.SimplSharp;
using Crestron.SimplSharp.CrestronIO; using Crestron.SimplSharp.CrestronIO;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
namespace PepperDash.Core.JsonToSimpl namespace PepperDash.Core.JsonToSimpl
{ {
public class JsonToSimplFileMaster : JsonToSimplMaster public class JsonToSimplFileMaster : JsonToSimplMaster
{ {
/// <summary> /// <summary>
/// Sets the filepath as well as registers this with the Global.Masters list /// Sets the filepath as well as registers this with the Global.Masters list
/// </summary> /// </summary>
public string Filepath { get; private set; } public string Filepath { get; private set; }
public string ActualFilePath { get; private set; } public string ActualFilePath { get; private set; }
/*****************************************************************************************/ /*****************************************************************************************/
/** Privates **/ /** Privates **/
// The JSON file in JObject form // The JSON file in JObject form
// For gathering the incoming data // For gathering the incoming data
object StringBuilderLock = new object(); object StringBuilderLock = new object();
// To prevent multiple same-file access // To prevent multiple same-file access
static object FileLock = new object(); static object FileLock = new object();
/*****************************************************************************************/ /*****************************************************************************************/
/// <summary> /// <summary>
/// SIMPL+ default constructor. /// SIMPL+ default constructor.
/// </summary> /// </summary>
public JsonToSimplFileMaster() public JsonToSimplFileMaster()
{ {
} }
/// <summary> /// <summary>
/// Read, evaluate and udpate status /// Read, evaluate and udpate status
/// </summary> /// </summary>
public void EvaluateFile(string filepath) public void EvaluateFile(string filepath)
{ {
Filepath = filepath; Filepath = filepath;
OnBoolChange(false, 0, JsonToSimplConstants.JsonIsValidBoolChange); OnBoolChange(false, 0, JsonToSimplConstants.JsonIsValidBoolChange);
if (string.IsNullOrEmpty(Filepath)) if (string.IsNullOrEmpty(Filepath))
{ {
CrestronConsole.PrintLine("Cannot evaluate file. JSON file path not set"); CrestronConsole.PrintLine("Cannot evaluate file. JSON file path not set");
return; return;
} }
// Resolve wildcard // Resolve wildcard
var dir = Path.GetDirectoryName(Filepath); var dir = Path.GetDirectoryName(Filepath);
Debug.Console(1, "Checking directory {0}", dir); Debug.Console(1, "Checking directory {0}", dir);
var fileName = Path.GetFileName(Filepath); var fileName = Path.GetFileName(Filepath);
var directory = new DirectoryInfo(dir); var directory = new DirectoryInfo(dir);
var actualFile = directory.GetFiles(fileName).FirstOrDefault(); var actualFile = directory.GetFiles(fileName).FirstOrDefault();
if(actualFile == null) if(actualFile == null)
{ {
var msg = string.Format("JSON file not found: {0}", Filepath); var msg = string.Format("JSON file not found: {0}", Filepath);
CrestronConsole.PrintLine(msg); CrestronConsole.PrintLine(msg);
ErrorLog.Error(msg); ErrorLog.Error(msg);
return; return;
} }
//var actualFileName = actualFile.FullName; //var actualFileName = actualFile.FullName;
ActualFilePath = actualFile.FullName; ActualFilePath = actualFile.FullName;
OnStringChange(ActualFilePath, 0, JsonToSimplConstants.ActualFilePathChange); OnStringChange(ActualFilePath, 0, JsonToSimplConstants.ActualFilePathChange);
Debug.Console(1, "Actual JSON file is {0}", ActualFilePath); Debug.Console(1, "Actual JSON file is {0}", ActualFilePath);
string json = File.ReadToEnd(ActualFilePath, System.Text.Encoding.ASCII); string json = File.ReadToEnd(ActualFilePath, System.Text.Encoding.ASCII);
try try
{ {
JsonObject = JObject.Parse(json); JsonObject = JObject.Parse(json);
foreach (var child in Children) foreach (var child in Children)
child.ProcessAll(); child.ProcessAll();
OnBoolChange(true, 0, JsonToSimplConstants.JsonIsValidBoolChange); OnBoolChange(true, 0, JsonToSimplConstants.JsonIsValidBoolChange);
} }
catch (Exception e) catch (Exception e)
{ {
var msg = string.Format("JSON parsing failed:\r{0}", e); var msg = string.Format("JSON parsing failed:\r{0}", e);
CrestronConsole.PrintLine(msg); CrestronConsole.PrintLine(msg);
ErrorLog.Error(msg); ErrorLog.Error(msg);
return; return;
} }
} }
public void setDebugLevel(int level) { public void setDebugLevel(int level) {
Debug.SetDebugLevel(level); Debug.SetDebugLevel(level);
} }
public override void Save() public override void Save()
{ {
// this code is duplicated in the other masters!!!!!!!!!!!!! // this code is duplicated in the other masters!!!!!!!!!!!!!
UnsavedValues = new Dictionary<string, JValue>(); UnsavedValues = new Dictionary<string, JValue>();
// Make each child update their values into master object // Make each child update their values into master object
foreach (var child in Children) foreach (var child in Children)
{ {
Debug.Console(1, "Master [{0}] checking child [{1}] for updates to save", UniqueID, child.Key); Debug.Console(1, "Master [{0}] checking child [{1}] for updates to save", UniqueID, child.Key);
child.UpdateInputsForMaster(); child.UpdateInputsForMaster();
} }
if (UnsavedValues == null || UnsavedValues.Count == 0) if (UnsavedValues == null || UnsavedValues.Count == 0)
{ {
Debug.Console(1, "Master [{0}] No updated values to save. Skipping", UniqueID); Debug.Console(1, "Master [{0}] No updated values to save. Skipping", UniqueID);
return; return;
} }
lock (FileLock) lock (FileLock)
{ {
Debug.Console(1, "Saving"); Debug.Console(1, "Saving");
foreach (var path in UnsavedValues.Keys) foreach (var path in UnsavedValues.Keys)
{ {
var tokenToReplace = JsonObject.SelectToken(path); var tokenToReplace = JsonObject.SelectToken(path);
if (tokenToReplace != null) if (tokenToReplace != null)
{// It's found {// It's found
tokenToReplace.Replace(UnsavedValues[path]); tokenToReplace.Replace(UnsavedValues[path]);
Debug.Console(1, "JSON Master[{0}] Updating '{1}'", UniqueID, path); Debug.Console(1, "JSON Master[{0}] Updating '{1}'", UniqueID, path);
} }
else // No token. Let's make one else // No token. Let's make one
{ {
//http://stackoverflow.com/questions/17455052/how-to-set-the-value-of-a-json-path-using-json-net //http://stackoverflow.com/questions/17455052/how-to-set-the-value-of-a-json-path-using-json-net
Debug.Console(1, "JSON Master[{0}] Cannot write value onto missing property: '{1}'", UniqueID, path); Debug.Console(1, "JSON Master[{0}] Cannot write value onto missing property: '{1}'", UniqueID, path);
// JContainer jpart = JsonObject; // JContainer jpart = JsonObject;
// // walk down the path and find where it goes // // walk down the path and find where it goes
//#warning Does not handle arrays. //#warning Does not handle arrays.
// foreach (var part in path.Split('.')) // foreach (var part in path.Split('.'))
// { // {
// var openPos = part.IndexOf('['); // var openPos = part.IndexOf('[');
// if (openPos > -1) // if (openPos > -1)
// { // {
// openPos++; // move to number // openPos++; // move to number
// var closePos = part.IndexOf(']'); // var closePos = part.IndexOf(']');
// var arrayName = part.Substring(0, openPos - 1); // get the name // var arrayName = part.Substring(0, openPos - 1); // get the name
// var index = Convert.ToInt32(part.Substring(openPos, closePos - openPos)); // var index = Convert.ToInt32(part.Substring(openPos, closePos - openPos));
// // Check if the array itself exists and add the item if so // // Check if the array itself exists and add the item if so
// if (jpart[arrayName] != null) // if (jpart[arrayName] != null)
// { // {
// var arrayObj = jpart[arrayName] as JArray; // var arrayObj = jpart[arrayName] as JArray;
// var item = arrayObj[index]; // var item = arrayObj[index];
// if (item == null) // if (item == null)
// arrayObj.Add(new JObject()); // arrayObj.Add(new JObject());
// } // }
// Debug.Console(0, "IGNORING MISSING ARRAY VALUE FOR NOW"); // Debug.Console(0, "IGNORING MISSING ARRAY VALUE FOR NOW");
// continue; // continue;
// } // }
// // Build the // // Build the
// if (jpart[part] == null) // if (jpart[part] == null)
// jpart.Add(new JProperty(part, new JObject())); // jpart.Add(new JProperty(part, new JObject()));
// jpart = jpart[part] as JContainer; // jpart = jpart[part] as JContainer;
// } // }
// jpart.Replace(UnsavedValues[path]); // jpart.Replace(UnsavedValues[path]);
} }
} }
using (StreamWriter sw = new StreamWriter(ActualFilePath)) using (StreamWriter sw = new StreamWriter(ActualFilePath))
{ {
try try
{ {
sw.Write(JsonObject.ToString()); sw.Write(JsonObject.ToString());
sw.Flush(); sw.Flush();
} }
catch (Exception e) catch (Exception e)
{ {
string err = string.Format("Error writing JSON file:\r{0}", e); string err = string.Format("Error writing JSON file:\r{0}", e);
Debug.Console(0, err); Debug.Console(0, err);
ErrorLog.Warn(err); ErrorLog.Warn(err);
return; return;
} }
} }
} }
} }
} }
} }

View File

@@ -4,4 +4,4 @@
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Pepperdash_Core")] [assembly: AssemblyProduct("Pepperdash_Core")]
[assembly: AssemblyCopyright("Copyright © PepperDash 2019")] [assembly: AssemblyCopyright("Copyright © PepperDash 2019")]
[assembly: AssemblyVersion("1.0.23.*")] [assembly: AssemblyVersion("1.0.0.*")]