ibms-dome/z01_WinAPP/Service/getObixSvc.cs
2022-10-14 16:08:54 +08:00

196 lines
8.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Http;
using System.Xml;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net;
using System.IO;
using tpDomeWinAPP.Models;
using System.Linq;
namespace tpDomeWinAPP.Service
{
public class getObixSvc
{
//List<_device> _deviceList;//= new List<_device>();
public async Task<List<device_obix_value>> GetIotData(string urlString, List<device_obix_value> deviceList, string deviceID)
{
//string[] ss = urlString.Split('/');
//string deviceID = ss[ss.Length - 2];
string result = string.Empty;
HttpClient client = new HttpClient();
var byteArray = Encoding.ASCII.GetBytes("stanGG:St12345678");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
try
{
HttpResponseMessage response = await client.GetAsync(urlString);
HttpContent content = response.Content;
// ... Check Status Code
Console.WriteLine("Response StatusCode: " + (int)response.StatusCode);
// ... Read the string.
result = await content.ReadAsStringAsync();
}
catch (Exception ex)
{
throw ex;
}
XmlDocument doc = new XmlDocument();
doc.LoadXml(result);
XmlElement xmlRoot = doc.DocumentElement;
//string jsonText = JsonConvert.SerializeXmlNode(doc);
//JObject resultVal = (JObject)JsonConvert.DeserializeObject(jsonText);
if (xmlRoot.ChildNodes.Count > 0)
{
foreach (XmlNode OneNode in xmlRoot.ChildNodes)
{
String StrNodeName = OneNode.Name.ToString();
if (StrNodeName == "ref")
{
string v0 = OneNode.Attributes[0].Value;
// if (v0 == "RH") MessageBox.Show("RH");
// 維修 開機狀態 報警 保養
//if (new[] { "Maintain", "Status", "Alarm", "Maintenance", "Temp", "RH", "AlarmState" }.Contains(v0))
//{
// switch (v0)
// {
// case "Maintain": v0 = v0 + " 維修 "; break;
// case "Status": v0 = v0 + " 開1 關0 "; break;
// case "Alarm": v0 = v0 + " 報警1 無0 "; break;
// case "Maintenance": v0 = v0 + " 保養1 無0 "; break;
// case "Temp": v0 = v0 + " 溫度 "; break;
// case "RH": v0 = v0 + " 濕 "; break;
// case "AlarmState": v0 = v0 + " 電力異常 "; break;
// }
device_obix_value device = new device_obix_value();
device.id = deviceID;
device.Name = v0;
if (OneNode.Attributes[3].Name == "display")
{
device.display = OneNode.Attributes[3].Value;
device.result_value = device.display.Split(' ')[0];
}
deviceList.Add(device);
// }
}
else if (StrNodeName == "bool")
{
string v0 = OneNode.Attributes[0].Value;
// 維修 開機狀態 報警 保養
//if (new[] { "Maintain", "Status", "Alarm", "Maintenance", "out" }.Contains(v0))
//{
device_obix_value device = new device_obix_value();
device.id = deviceID;
device.Name = v0;
if (OneNode.Attributes[4].Name == "display")
{
device.display = OneNode.Attributes[4].Value;
device.result_value = device.display.Split(' ')[0];
}
deviceList.Add(device);
//}
}
else if (StrNodeName == "obj")
{
string v0 = OneNode.Attributes[0].Value;
// 維修 開機狀態 報警 保養
//if (new[] { "Maintain", "Status", "Alarm", "Maintenance", "out" }.Contains(v0))
//{
device_obix_value device = new device_obix_value();
device.id = deviceID;
device.Name = v0;
if (OneNode.Attributes[4].Name == "display")
{
device.display = OneNode.Attributes[4].Value;
device.result_value = device.display.Split(' ')[0];
}
deviceList.Add(device);
//}
}
}
}
else
{
if (xmlRoot.Name == "bool")
{
// xmlRoot.Attributes[0].Value
var item = xmlRoot.Attributes.GetNamedItem("display");
var times = xmlRoot.Attributes.GetNamedItem("href").Value.ToString().Split('/');
device_obix_value device = new device_obix_value();
device.id = deviceID;
device.Name = times[times.Length - 3];
device.display = item.Value;
device.result_value = device.display.Split(' ')[0];
deviceList.Add(device);
}
string data = xmlRoot.Name;
}
return deviceList;
}
public async Task<bool> PostIotControl(string urlString, string deviceID, bool value_OnOff)
{
bool result = true;
String username = "stanGG";
String password = "St12345678";
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
String API_Url = urlString;
HttpWebRequest Postrequest = (HttpWebRequest)WebRequest.Create(API_Url);
Postrequest.Method = "POST";
Postrequest.Headers.Add("Authorization", "Basic " + encoded);
Postrequest.PreAuthenticate = true;
using (var streamWriter = new StreamWriter(Postrequest.GetRequestStream()))
{
string json = "<real val='" + value_OnOff.ToString().ToLower() + "'/>";
streamWriter.Write(json);
}
HttpWebResponse response = (HttpWebResponse)Postrequest.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(responseString);
string jsonText = JsonConvert.SerializeXmlNode(xmlDoc);
JObject resultVal = (JObject)JsonConvert.DeserializeObject(jsonText);
var actualVal = "";
var responseStatus = "";
if (resultVal.ContainsKey("bool"))
{
responseStatus = resultVal["bool"]["@display"].ToString().Split(' ')[1];
actualVal = resultVal["bool"]["@display"].ToString().Split(' ')[0];
}
else
{
result = false;
throw new Exception("API節點發生錯誤");
}
if (responseStatus == "{ok}")
{
result = true;
}
else
{
throw new Exception("API節點發生錯誤");
}
return result;
}
}
}