fix OTA更新逻辑

This commit is contained in:
wangkaiyi 2024-08-22 17:09:31 +08:00
parent afb91406f0
commit 40569d9184
1 changed files with 70 additions and 54 deletions

View File

@ -25,10 +25,74 @@ public class OTAService
_previousBackupPath = previousBackupPath;
_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>
public void Install()
public bool Install()
{
try
{
@ -58,11 +122,14 @@ public class OTAService
//删除更新包
OTAClient.DeleteFile(_updatePackagePath);
return true;
}
catch (Exception ex)
{
RollBack();
Console.WriteLine($"更新异常,已回滚: {ex.Message}");
return false;
}
}
catch (Exception ex)
@ -74,6 +141,8 @@ public class OTAService
{
OTAClient.DeleteDirectory(_criticalBackupDir);
}
return false;
}
}
@ -122,57 +191,4 @@ public class OTAService
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();
}
}