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
}
}