From 40569d91846a568b464e13479db379df1481a805 Mon Sep 17 00:00:00 2001 From: wangkaiyi Date: Thu, 22 Aug 2024 17:09:31 +0800 Subject: [PATCH] =?UTF-8?q?fix=20OTA=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OTA/Service/OTAService.cs | 124 ++++++++++-------- 1 file changed, 70 insertions(+), 54 deletions(-) diff --git a/MasstransferExporter/OTA/Service/OTAService.cs b/MasstransferExporter/OTA/Service/OTAService.cs index 0202125..8a4ddad 100644 --- a/MasstransferExporter/OTA/Service/OTAService.cs +++ b/MasstransferExporter/OTA/Service/OTAService.cs @@ -25,10 +25,74 @@ public class OTAService _previousBackupPath = previousBackupPath; _updatePackagePath = updatePackagePath; } + + /// + /// 订阅OTA更新 + /// + public async Task ListenOTAUpdateEvent() + { + await MessageQueueHelper.Subscribe(Topics.IssuedOTAPackage, HandleUpdateOTAEvent); + } + + /// + /// 查询OTA更新 + /// + /// + public static async Task QueryOTAUpdate() + { + await MessageQueueHelper.Publish(Topics.QueryOTA, null); + } + + /// + /// OTA更新反馈 + /// + /// + public async Task OTALicenseUpdateEventFeedback(OTAResultData resutl) + { + await MessageQueueHelper.Publish(Topics.OTAUpgradeFeedback, resutl); + } + + /// + /// 处理OTA更新 + /// + /// + /// + 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); + } + /// /// 安装压缩包 /// - 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); } - - - /// - /// 订阅OTA更新 - /// - public async Task ListenOTAUpdateEvent() - { - await MessageQueueHelper.Subscribe(Topics.IssuedOTAPackage, HandleUpdateOTAEvent); - } - - /// - /// 查询OTA更新 - /// - /// - public static async Task QueryOTAUpdate() - { - await MessageQueueHelper.Publish(Topics.QueryOTA, null); - } - - /// - /// OTA更新反馈 - /// - /// - public async Task OTALicenseUpdateEventFeedback(string resutl) - { - await MessageQueueHelper.Publish(Topics.OTAUpgradeFeedback, resutl); - } - - /// - /// 处理OTA更新 - /// - /// - /// - 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(); - } } \ No newline at end of file