fix OTA更新逻辑
This commit is contained in:
parent
afb91406f0
commit
40569d9184
|
@ -25,10 +25,74 @@ public class OTAService
|
||||||
_previousBackupPath = previousBackupPath;
|
_previousBackupPath = previousBackupPath;
|
||||||
_updatePackagePath = updatePackagePath;
|
_updatePackagePath = updatePackagePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 订阅OTA更新
|
||||||
|
/// </summary>
|
||||||
|
public async Task ListenOTAUpdateEvent()
|
||||||
|
{
|
||||||
|
await MessageQueueHelper.Subscribe(Topics.IssuedOTAPackage, HandleUpdateOTAEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询OTA更新
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
public static async Task QueryOTAUpdate()
|
||||||
|
{
|
||||||
|
await MessageQueueHelper.Publish(Topics.QueryOTA, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OTA更新反馈
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="resutl"></param>
|
||||||
|
public async Task OTALicenseUpdateEventFeedback(OTAResultData resutl)
|
||||||
|
{
|
||||||
|
await MessageQueueHelper.Publish(Topics.OTAUpgradeFeedback, resutl);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 处理OTA更新
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="topic"></param>
|
||||||
|
/// <param name="otaUpdateData"></param>
|
||||||
|
private async Task HandleUpdateOTAEvent(string topic, OTAUpdateData otaUpdateData)
|
||||||
|
{
|
||||||
|
var type = otaUpdateData.Type;
|
||||||
|
var url = otaUpdateData.Url;
|
||||||
|
var version = otaUpdateData.Version;
|
||||||
|
var module = otaUpdateData.Module;
|
||||||
|
var size = otaUpdateData.Size;
|
||||||
|
var checksum = otaUpdateData.Checksum;
|
||||||
|
var name = otaUpdateData.Name;
|
||||||
|
var description = otaUpdateData.Description;
|
||||||
|
|
||||||
|
OTAResultData otaResultData = new OTAResultData();
|
||||||
|
//下载更新包
|
||||||
|
await ApiClient.DownloadFileAsync(url, _updatePackagePath);
|
||||||
|
|
||||||
|
//校验压缩包
|
||||||
|
if(!OTAClient.CheckMD5(checksum, _updatePackagePath)) return;
|
||||||
|
|
||||||
|
//kill masstransfer
|
||||||
|
|
||||||
|
//启动更新
|
||||||
|
otaResultData.Result = Install() ? (byte)1 : (byte)0;
|
||||||
|
|
||||||
|
//restart masstransfer
|
||||||
|
|
||||||
|
//更新反馈
|
||||||
|
otaResultData.OtaSoftwareVersion = version;
|
||||||
|
otaResultData.CurrentSoftwareVersion = version; //**需要修改为当前版本
|
||||||
|
|
||||||
|
await OTALicenseUpdateEventFeedback(otaResultData);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 安装压缩包
|
/// 安装压缩包
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Install()
|
public bool Install()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -58,11 +122,14 @@ public class OTAService
|
||||||
//删除更新包
|
//删除更新包
|
||||||
OTAClient.DeleteFile(_updatePackagePath);
|
OTAClient.DeleteFile(_updatePackagePath);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
RollBack();
|
RollBack();
|
||||||
Console.WriteLine($"更新异常,已回滚: {ex.Message}");
|
Console.WriteLine($"更新异常,已回滚: {ex.Message}");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -74,6 +141,8 @@ public class OTAService
|
||||||
{
|
{
|
||||||
OTAClient.DeleteDirectory(_criticalBackupDir);
|
OTAClient.DeleteDirectory(_criticalBackupDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,57 +191,4 @@ public class OTAService
|
||||||
OTAClient.DeleteFile(_previousBackupPath);
|
OTAClient.DeleteFile(_previousBackupPath);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 订阅OTA更新
|
|
||||||
/// </summary>
|
|
||||||
public async Task ListenOTAUpdateEvent()
|
|
||||||
{
|
|
||||||
await MessageQueueHelper.Subscribe(Topics.IssuedOTAPackage, HandleUpdateOTAEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 查询OTA更新
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="request"></param>
|
|
||||||
public static async Task QueryOTAUpdate()
|
|
||||||
{
|
|
||||||
await MessageQueueHelper.Publish(Topics.QueryOTA, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// OTA更新反馈
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="resutl"></param>
|
|
||||||
public async Task OTALicenseUpdateEventFeedback(string resutl)
|
|
||||||
{
|
|
||||||
await MessageQueueHelper.Publish(Topics.OTAUpgradeFeedback, resutl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 处理OTA更新
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="topic"></param>
|
|
||||||
/// <param name="otaUpdateData"></param>
|
|
||||||
private async Task HandleUpdateOTAEvent(string topic, OTAUpdateData otaUpdateData)
|
|
||||||
{
|
|
||||||
var type = otaUpdateData.Type;
|
|
||||||
var url = otaUpdateData.Url;
|
|
||||||
var version = otaUpdateData.Version;
|
|
||||||
var module = otaUpdateData.Module;
|
|
||||||
var size = otaUpdateData.Size;
|
|
||||||
var checksum = otaUpdateData.Checksum;
|
|
||||||
var name = otaUpdateData.Name;
|
|
||||||
var description = otaUpdateData.Description;
|
|
||||||
|
|
||||||
//下载更新包
|
|
||||||
await ApiClient.DownloadFileAsync(url, _updatePackagePath);
|
|
||||||
|
|
||||||
//校验压缩包
|
|
||||||
if(!OTAClient.CheckMD5(checksum, _updatePackagePath)) return;
|
|
||||||
|
|
||||||
//启动更新
|
|
||||||
Install();
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue