using System; using System.Collections.Generic; namespace ZigBee.Device { public class ThirdPartyModuleUpgrade : CommonDevice { #region 获取云端(第三方模块)固件信息 /// /// 获取云端服务器中固件版本信息 /// /// The https app version async. public async System.Threading.Tasks.Task RequestHttpsAcVersionAsync(string firewareName) { try { var requestOBJ = new GetFirmwareInfoOBJ { Name = firewareName, RequestVersion = "CodeIDString",//按照郭学成说的当前app是哪个版本 FirmwareManaFirstType = 2 }; var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestOBJ); var result = await RequestHttpsZigbeeAsync("FirmwareMana/DetectionPlatformUploadFirmware", System.Text.Encoding.UTF8.GetBytes(requestJson)); if (result == null) { return null; } if (result.StateCode.ToUpper() == "SUCCESS") { if (result.ResponseData == null) { return null; } var responeData = Newtonsoft.Json.JsonConvert.DeserializeObject(result.ResponseData.ToString()); if (responeData == null || responeData.pageData == null) { return null; } // int MaxIndex = 0; //int NewID = 0; //for (int i = 0; i < responeData.pageData.Count; i++) //{ //var moduleInfo = responeData.pageData[i]; // if (int.Parse(moduleInfo.Id) > NewID) // { // NewID = int.Parse(moduleInfo.Id); // MaxIndex = i; // } //} return responeData.pageData[0]; } return null; } catch (Exception ex) { return null; } } /// 下载云端固件的数据 /// [Serializable] public class ThirdPartyModuelInfoOBJ { public string Name { get; set; } public string FirmwareVersion { get; set; } public string Remarks { get; set; } public string DistributedMark { get; set; } public string Id { get; set; } public string CreatedOnUtc { get; set; } } /// /// 获取云端固件的数据 /// public class GetFirmwareInfoOBJ { public string RequestVersion; /// /// Name 搜索固件名称(固件名称) /// public string Name; /// /// 搜索第一级分类(0:App 1:Zigbee网关 2:Zigbee 设备,3:Buspro) /// public int FirmwareManaFirstType; } //[Serializable] public class ThirdPartyModuelInfoRes { public int PageIndex; public int PageSize; public int TotalCount; public int TotalPages; public bool HasPreviousPage; public bool HasNextPage; public List pageData = new List { }; } string RequestHttpsHost = "https://global.hdlcontrol.com/HangZhouHdlCloudApi"; /// /// 请求服务器方法 /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据 /// /// 请求Url /// 请求的的数据 /// 得到响应的数据 public async System.Threading.Tasks.Task RequestHttpsZigbeeBytesResultAsync(string requestUrl, byte[] byteData) { try { //初始化新的webRequst //1. 创建httpWebRequest对象 var webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(new Uri($"{RequestHttpsHost}/{requestUrl}")); //2. 初始化HttpWebRequest对象 webRequest.Method = "POST"; webRequest.ContentType = "application/json"; webRequest.ContentLength = byteData.Length; webRequest.Headers.Add(System.Net.HttpRequestHeader.Authorization, Shared.Common.Config.Instance.Token); //3. 附加要POST给服务器的数据到HttpWebRequest对象(附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。) var newStream = webRequest.GetRequestStream();//创建一个Stream,赋值是写入HttpWebRequest对象提供的一个stream里面 newStream.Write(byteData, 0, byteData.Length); newStream.Flush(); newStream.Close(); //4. 读取服务器的返回信息 var response = (System.Net.HttpWebResponse)webRequest.GetResponse(); var stream = response.GetResponseStream(); if (stream == null) { return null; } var result = new byte[stream.Length]; //已接收的长度 int receivedLength = 0; //注意,当数据比较大时,可能一次性没读完,需要重复读取 //当完成时可能返回的结果为 0 while (receivedLength < result.Length) { var rece = await stream.ReadAsync(result, receivedLength, result.Length - receivedLength); receivedLength += rece; if (rece == 0) { break; } } stream.Close(); response.Close(); return result; } catch (Exception e) { System.Console.WriteLine(e.Message); return null; } } /// /// 请求服务器方法 /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据 /// /// 请求Url /// 请求的的数据 /// 得到响应的数据 public async System.Threading.Tasks.Task RequestHttpsZigbeeResultAsync(string requestUrl, byte[] byteData) { var result = await RequestHttpsZigbeeBytesResultAsync(requestUrl, byteData); if (result != null) { return System.Text.Encoding.UTF8.GetString(result); } return null; } /// /// 请求服务器方法 /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据 /// /// 请求Url /// 请求的的数据 /// 得到响应的数据 public async System.Threading.Tasks.Task RequestHttpsZigbeeAsync(string requestUrl, byte[] byteData) { string result = await this.RequestHttpsZigbeeResultAsync(requestUrl, byteData); if (result != null) { try { var data = Newtonsoft.Json.JsonConvert.DeserializeObject(result); return data; } catch (Exception ex) { System.Console.WriteLine(ex.Message); } } return null; } /// /// 下载Ac程序 /// /// The load apk async. /// 请求链接 /// 请求参数 public System.Threading.Tasks.Task DownLoadAcAsync(string requestUrl, byte[] byteData) { try { var webClient = new System.Net.WebClient { }; webClient.Headers.Add(System.Net.HttpRequestHeader.ContentType, "application/json"); webClient.Headers.Add(System.Net.HttpRequestHeader.Authorization, Shared.Common.Config.Instance.Token); var result = webClient.UploadDataTaskAsync($"{RequestHttpsHost}/{requestUrl}", "POST", byteData); if (result == null) { return null; } return result; } catch (Exception ex) { return null; } finally { } } #endregion #region 下载固件程序 /// /// 下载Ac固件程序 /// public class DownLoadAcFireware { public string RequestVersion; /// /// 下载固件的唯一标识 /// public string DistributedMark; } #endregion } }