diff --git a/CincyLib/CincyLib.csproj b/CincyLib/CincyLib.csproj
index 263b676..a36751a 100644
--- a/CincyLib/CincyLib.csproj
+++ b/CincyLib/CincyLib.csproj
@@ -36,7 +36,12 @@
-
+
+
+
+
+
+
diff --git a/CincyLib/Extensions.cs b/CincyLib/Extensions.cs
index 171c270..64b583c 100644
--- a/CincyLib/Extensions.cs
+++ b/CincyLib/Extensions.cs
@@ -159,5 +159,13 @@ namespace CincyLib
return d;
}
+
+ public static DateTime RoundDown(this DateTime dt, TimeSpan d)
+ {
+ var modTicks = dt.Ticks % d.Ticks;
+ var delta = -modTicks;
+
+ return new DateTime(dt.Ticks + delta, dt.Kind);
+ }
}
}
diff --git a/CincyLib/Laser/CNCMode.cs b/CincyLib/Laser/CNCMode.cs
new file mode 100644
index 0000000..391d427
--- /dev/null
+++ b/CincyLib/Laser/CNCMode.cs
@@ -0,0 +1,9 @@
+namespace CincyLib.Laser
+{
+ public enum CNCMode
+ {
+ Auto,
+ Jog,
+ Home
+ }
+}
diff --git a/CincyLib/Laser/CNCRunStatus.cs b/CincyLib/Laser/CNCRunStatus.cs
new file mode 100644
index 0000000..ec22c60
--- /dev/null
+++ b/CincyLib/Laser/CNCRunStatus.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel;
+
+namespace CincyLib.Laser
+{
+ public enum CNCRunStatus
+ {
+ [Description("No Program Loaded")]
+ NoProgramLoaded,
+ Stopped,
+ [Description("Ready To Run")]
+ ReadyToRun,
+ Running,
+ Finished,
+ Unknown
+ }
+}
diff --git a/CincyLib/Laser/HighVoltage.cs b/CincyLib/Laser/HighVoltage.cs
new file mode 100644
index 0000000..a3720ac
--- /dev/null
+++ b/CincyLib/Laser/HighVoltage.cs
@@ -0,0 +1,9 @@
+namespace CincyLib.Laser
+{
+ public enum HighVoltage
+ {
+ Locked,
+ Off,
+ On
+ }
+}
diff --git a/CincyLib/Laser/LaserMains.cs b/CincyLib/Laser/LaserMains.cs
new file mode 100644
index 0000000..605dd45
--- /dev/null
+++ b/CincyLib/Laser/LaserMains.cs
@@ -0,0 +1,9 @@
+namespace CincyLib.Laser
+{
+ public enum LaserMains
+ {
+ Locked,
+ Off,
+ On
+ }
+}
diff --git a/CincyLib/Laser/LaserStatus.cs b/CincyLib/Laser/LaserStatus.cs
new file mode 100644
index 0000000..ba20780
--- /dev/null
+++ b/CincyLib/Laser/LaserStatus.cs
@@ -0,0 +1,57 @@
+using System;
+
+namespace CincyLib.Laser
+{
+ public class LaserStatus
+ {
+ public DateTime DateTimeUTC { get; internal set; }
+
+ public string Program { get; internal set; }
+
+ public CNCMode CNCMode { get; internal set; }
+
+ public CNCRunStatus RunStatus { get; internal set; }
+
+ public LaserMains LaserMains { get; internal set; }
+
+ public HighVoltage HighVoltage { get; internal set; }
+
+ public string SystemAlarms { get; internal set; }
+
+ public string LaserAlarms { get; internal set; }
+
+ public string FYIMessages { get; internal set; }
+
+ public bool IsDifferentThan(LaserStatus laserStatus)
+ {
+ if (laserStatus == null)
+ return true;
+
+ if (Program != laserStatus.Program)
+ return true;
+
+ if (CNCMode != laserStatus.CNCMode)
+ return true;
+
+ if (RunStatus != laserStatus.RunStatus)
+ return true;
+
+ if (LaserMains != laserStatus.LaserMains)
+ return true;
+
+ if (HighVoltage != laserStatus.HighVoltage)
+ return true;
+
+ if (SystemAlarms != laserStatus.SystemAlarms)
+ return true;
+
+ if (LaserAlarms != laserStatus.LaserAlarms)
+ return true;
+
+ if (FYIMessages != laserStatus.FYIMessages)
+ return true;
+
+ return false;
+ }
+ }
+}
diff --git a/CincyLib/Laser/LaserWebPanel.cs b/CincyLib/Laser/LaserWebClient.cs
similarity index 50%
rename from CincyLib/Laser/LaserWebPanel.cs
rename to CincyLib/Laser/LaserWebClient.cs
index 263146c..3cf5f34 100644
--- a/CincyLib/Laser/LaserWebPanel.cs
+++ b/CincyLib/Laser/LaserWebClient.cs
@@ -1,5 +1,4 @@
using System;
-using System.ComponentModel;
using System.IO;
using System.Net;
using System.Text;
@@ -7,162 +6,16 @@ using System.Xml;
namespace CincyLib.Laser
{
- public class LaserWebPanel
+ public class LaserWebClient
{
- public string CurrentProgram { get; set; }
+ public readonly WebClient WebClient;
- public CNCMode CurrentMode { get; set; }
-
- public CNCRunStatus CurrentStatus { get; set; }
-
- public LaserMains LaserMains { get; set; }
-
- public HighVoltage HighVoltage { get; set; }
-
- public string[] SystemAlarms { get; set; }
-
- public string[] LaserAlarms { get; set; }
-
- public string[] FYIMessages { get; set; }
-
- public bool Update(Stream stream)
+ private void ApplyCorrections(LaserStatus status)
{
- try
+ if (status.FYIMessages.ToLower().Contains("laser high voltage is off"))
{
- var reader = new LaserWebPanelReader(this);
- return reader.Read(stream);
+ status.HighVoltage = HighVoltage.Off;
}
- catch { }
-
- return false;
- }
-
- public bool Update(Uri uri)
- {
- try
- {
- var reader = new LaserWebPanelReader(this);
- return reader.Read(uri);
- }
- catch { }
-
- return false;
- }
-
- public bool Update(string url)
- {
- try
- {
- var reader = new LaserWebPanelReader(this);
- return reader.Read(new Uri(url));
- }
- catch { }
-
- return false;
- }
- }
-
- internal class LaserWebPanelReader
- {
- public readonly LaserWebPanel LaserWebPanel;
-
- public LaserWebPanelReader()
- {
- LaserWebPanel = new LaserWebPanel();
- }
-
- public LaserWebPanelReader(LaserWebPanel lwp)
- {
- LaserWebPanel = lwp;
- }
-
- public bool Read(Stream stream)
- {
- try
- {
- var reader = new StreamReader(stream);
- var responseString = reader.ReadToEnd();
- reader.Close();
-
- var doc = new XmlDocument();
- doc.LoadXml(responseString);
-
- LaserWebPanel.CurrentProgram = doc.DocumentElement.SelectSingleNode("/Refresh/ProgramName").InnerText;
- LaserWebPanel.SystemAlarms = doc.DocumentElement.SelectSingleNode("/Refresh/SystemAlarms").InnerText.Replace("\r", "").Split('\n');
- LaserWebPanel.LaserAlarms = doc.DocumentElement.SelectSingleNode("/Refresh/LaserAlarms").InnerText.Replace("\r", "").Split('\n');
- LaserWebPanel.FYIMessages = doc.DocumentElement.SelectSingleNode("/Refresh/FYIMessages").InnerText.Replace("\r", "").Split('\n');
-
- int mode;
- var cncModeString = doc.DocumentElement.SelectSingleNode("/Refresh/CNCMode").InnerText;
-
- if (int.TryParse(cncModeString, out mode))
- LaserWebPanel.CurrentMode = GetCNCMode(mode);
-
- int status;
- var cncRunStatusString = doc.DocumentElement.SelectSingleNode("/Refresh/CNCRunStatus").InnerText;
-
- if (int.TryParse(cncRunStatusString, out status))
- LaserWebPanel.CurrentStatus = GetCNCRunStatus(status);
-
- int mains;
- var laserMainsString = doc.DocumentElement.SelectSingleNode("/Refresh/LaserMains").InnerText;
-
- if (int.TryParse(laserMainsString, out mains))
- LaserWebPanel.LaserMains = GetLaserMains(mains);
-
- int hv;
- var highVoltageString = doc.DocumentElement.SelectSingleNode("/Refresh/HighVoltage").InnerText;
-
- if (int.TryParse(highVoltageString, out hv))
- LaserWebPanel.HighVoltage = GetHighVoltage(hv);
-
- ApplyCorrections(LaserWebPanel);
-
- return true;
- }
- catch { }
-
- return false;
-
- }
-
- private void ApplyCorrections(LaserWebPanel lwp)
- {
- foreach (var msg in lwp.FYIMessages)
- {
- if (msg.ToLower().Contains("laser high voltage is off"))
- {
- lwp.HighVoltage = HighVoltage.Off;
- break;
- }
- }
- }
-
- public bool Read(Uri uri)
- {
- try
- {
- var refreshUri = new Uri(uri, "refresh.aspx");
- var request = WebRequest.Create(refreshUri.ToString());
- request.Method = "POST";
-
- using (var stream = request.GetRequestStream())
- {
- var postData = "";
- var byteData = Encoding.ASCII.GetBytes(postData);
- stream.Write(byteData, 0, byteData.Length);
- }
-
- var response = (HttpWebResponse)request.GetResponse();
-
- return Read(response.GetResponseStream());
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
-
- return false;
}
private static CNCMode GetCNCMode(int i)
@@ -211,38 +64,102 @@ namespace CincyLib.Laser
default: return HighVoltage.Off;
}
}
- }
- public enum CNCMode
- {
- Auto,
- Jog,
- Home
- }
+ private string URL = null;
- public enum CNCRunStatus
- {
- [Description("No Program Loaded")]
- NoProgramLoaded,
- Stopped,
- [Description("Ready To Run")]
- ReadyToRun,
- Running,
- Finished,
- Unknown
- }
+ public LaserStatus GetStatus(Stream stream)
+ {
+ try
+ {
+ var reader = new StreamReader(stream);
+ var responseString = reader.ReadToEnd();
+ reader.Close();
- public enum LaserMains
- {
- Locked,
- Off,
- On
- }
+ var status = new LaserStatus();
+ status.DateTimeUTC = DateTime.UtcNow.RoundDown(TimeSpan.FromSeconds(1));
- public enum HighVoltage
- {
- Locked,
- Off,
- On
+ var doc = new XmlDocument();
+ doc.LoadXml(responseString);
+
+ if (doc.InnerText.Contains("Access is denied"))
+ return null;
+
+ status.Program = doc.DocumentElement.SelectSingleNode("/Refresh/ProgramName").InnerText;
+ status.SystemAlarms = doc.DocumentElement.SelectSingleNode("/Refresh/SystemAlarms").InnerText;
+ status.LaserAlarms = doc.DocumentElement.SelectSingleNode("/Refresh/LaserAlarms").InnerText;
+ status.FYIMessages = doc.DocumentElement.SelectSingleNode("/Refresh/FYIMessages").InnerText;
+
+ int mode;
+ var cncModeString = doc.DocumentElement.SelectSingleNode("/Refresh/CNCMode").InnerText;
+
+ if (int.TryParse(cncModeString, out mode))
+ status.CNCMode = GetCNCMode(mode);
+
+ int runStatus;
+ var cncRunStatusString = doc.DocumentElement.SelectSingleNode("/Refresh/CNCRunStatus").InnerText;
+
+ if (int.TryParse(cncRunStatusString, out runStatus))
+ status.RunStatus = GetCNCRunStatus(runStatus);
+
+ int mains;
+ var laserMainsString = doc.DocumentElement.SelectSingleNode("/Refresh/LaserMains").InnerText;
+
+ if (int.TryParse(laserMainsString, out mains))
+ status.LaserMains = GetLaserMains(mains);
+
+ int hv;
+ var highVoltageString = doc.DocumentElement.SelectSingleNode("/Refresh/HighVoltage").InnerText;
+
+ if (int.TryParse(highVoltageString, out hv))
+ status.HighVoltage = GetHighVoltage(hv);
+
+ ApplyCorrections(status);
+
+ return status;
+ }
+ catch { }
+
+ return null;
+ }
+
+ public LaserStatus GetStatus(Uri uri)
+ {
+ try
+ {
+ var refreshUri = new Uri(uri, "refresh.aspx");
+ var request = WebRequest.Create(refreshUri.ToString());
+ request.Method = "POST";
+
+ using (var stream = request.GetRequestStream())
+ {
+ var postData = "";
+ var byteData = Encoding.ASCII.GetBytes(postData);
+ stream.Write(byteData, 0, byteData.Length);
+ }
+
+ var response = (HttpWebResponse)request.GetResponse();
+
+ return GetStatus(response.GetResponseStream());
+ }
+ catch (Exception ex)
+ {
+ Console.Error.WriteLine(ex.Message);
+ }
+
+ return null;
+ }
+
+ public LaserStatus GetStatus(string url)
+ {
+ URL = url;
+ try
+ {
+ var uri = new Uri(url);
+ return GetStatus(uri);
+ }
+ catch { }
+
+ return null;
+ }
}
}