using System;
|
using System.Collections.Generic;
|
|
namespace ZigBee.Device
|
{
|
public class ThirdPartyModuleUpgrade : CommonDevice
|
{
|
#region 获取云端(第三方模块)固件信息
|
/// <summary>
|
/// 获取云端服务器中固件版本信息
|
/// </summary>
|
/// <returns>The https app version async.</returns>
|
public async System.Threading.Tasks.Task<ThirdPartyModuelInfoOBJ> 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<ThirdPartyModuelInfoRes>(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;
|
}
|
}
|
|
/// 下载云端固件的数据
|
/// </summary>
|
[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; }
|
}
|
|
/// <summary>
|
/// 获取云端固件的数据
|
/// </summary>
|
public class GetFirmwareInfoOBJ
|
{
|
public string RequestVersion;
|
/// <summary>
|
/// Name 搜索固件名称(固件名称)
|
/// </summary>
|
public string Name;
|
/// <summary>
|
/// 搜索第一级分类(0:App 1:Zigbee网关 2:Zigbee 设备,3:Buspro)
|
/// </summary>
|
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<ThirdPartyModuelInfoOBJ> pageData = new List<ThirdPartyModuelInfoOBJ> { };
|
}
|
|
string RequestHttpsHost = "https://global.hdlcontrol.com/HangZhouHdlCloudApi";
|
/// <summary>
|
/// 请求服务器方法
|
/// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据
|
/// </summary>
|
/// <param name="requestUrl">请求Url</param>
|
/// <param name="byteData">请求的的数据</param>
|
/// <returns>得到响应的数据</returns>
|
public async System.Threading.Tasks.Task<byte[]> 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;
|
}
|
}
|
|
/// <summary>
|
/// 请求服务器方法
|
/// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据
|
/// </summary>
|
/// <param name="requestUrl">请求Url</param>
|
/// <param name="byteData">请求的的数据</param>
|
/// <returns>得到响应的数据</returns>
|
public async System.Threading.Tasks.Task<string> RequestHttpsZigbeeResultAsync(string requestUrl, byte[] byteData)
|
{
|
var result = await RequestHttpsZigbeeBytesResultAsync(requestUrl, byteData);
|
if (result != null)
|
{
|
return System.Text.Encoding.UTF8.GetString(result);
|
}
|
return null;
|
}
|
|
/// <summary>
|
/// 请求服务器方法
|
/// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据
|
/// </summary>
|
/// <param name="requestUrl">请求Url</param>
|
/// <param name="byteData">请求的的数据</param>
|
/// <returns>得到响应的数据</returns>
|
public async System.Threading.Tasks.Task<Shared.Common.ResponseEntity.ResponsePack> RequestHttpsZigbeeAsync(string requestUrl, byte[] byteData)
|
{
|
string result = await this.RequestHttpsZigbeeResultAsync(requestUrl, byteData);
|
if (result != null)
|
{
|
try
|
{
|
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Shared.Common.ResponseEntity.ResponsePack>(result);
|
return data;
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine(ex.Message);
|
}
|
}
|
return null;
|
}
|
|
/// <summary>
|
/// 下载Ac程序
|
/// </summary>
|
/// <returns>The load apk async.</returns>
|
/// <param name="requestUrl">请求链接</param>
|
/// <param name="byteData">请求参数</param>
|
public System.Threading.Tasks.Task<byte[]> 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 下载固件程序
|
/// <summary>
|
/// 下载Ac固件程序
|
/// </summary>
|
public class DownLoadAcFireware
|
{
|
public string RequestVersion;
|
/// <summary>
|
/// 下载固件的唯一标识
|
/// </summary>
|
public string DistributedMark;
|
}
|
#endregion
|
}
|
}
|