MasstransferExporter/MasstransferInfrastructure/OTA/Service/OTAService.cs

126 lines
3.7 KiB
C#

using MasstransferInfrastructure.OTA.Client;
using MasstransferInfrastructure.OTA.Model;
namespace MasstransferInfrastructure.OTA.Service;
public class OTAService
{
private readonly OTAClient _otaClient;
private readonly string appDir;
private readonly string criticalBackupDir;
private readonly string criticalSourceLogPath;
private readonly string[] criticalFileExtension;
private readonly string previousBackupPath;
private readonly string updatePackagePath;
public OTAService(string AppDir, string CriticalBackupDir, string CriticalSourceLogPath, string[] CriticalFileExtension, string PreviousBackupPath, string UpdatePackagePath)
{
_otaClient = new OTAClient();
appDir = AppDir;
criticalBackupDir = CriticalBackupDir;
criticalSourceLogPath = CriticalSourceLogPath;
criticalFileExtension = CriticalFileExtension;
previousBackupPath = PreviousBackupPath;
updatePackagePath = UpdatePackagePath;
}
/// <summary>
/// 更新压缩包
/// </summary>
public void Update()
{
try
{
//初始化
initDir();
//备份重要文件
_otaClient.BackupEssentialFiles(appDir, criticalBackupDir, criticalFileExtension, criticalSourceLogPath);
//备份旧版本文件
_otaClient.CompressDirectory(appDir, previousBackupPath);
try
{
//删除旧版本原文件
_otaClient.DeleteDirectory(appDir);
//解压更新包
_otaClient.ExtractDirectory(updatePackagePath, appDir);
//恢复重要文件
_otaClient.RecoverCriticalFiles(criticalSourceLogPath);
//删除旧版本备份文件
_otaClient.DeleteFile(previousBackupPath);
//删除更新包
_otaClient.DeleteFile(updatePackagePath);
}
catch (Exception ex)
{
RollBack();
Console.WriteLine($"更新异常,已回滚: {ex.Message}");
}
}
catch (Exception ex)
{
Console.WriteLine($"更新异常e: {ex.Message}");
//如果重要文件备份已经产生,则删除
if(Directory.Exists(criticalBackupDir))
{
_otaClient.DeleteDirectory(criticalBackupDir);
}
}
}
/// <summary>
/// 初始化重要文件备份目录
/// </summary>
private void initDir()
{
if (Directory.Exists(criticalBackupDir))
{
Directory.Delete(criticalBackupDir, true);
}
Directory.CreateDirectory(criticalBackupDir);
}
/// <summary>
/// 回滚
/// </summary>
private void RollBack()
{
//删除安装过程中创建的文件、目录
var directoryList = new string[] { appDir, criticalBackupDir};
var filePath = new String[] { updatePackagePath };
foreach (var directory in directoryList)
{
if (Directory.Exists(directory))
{
_otaClient.DeleteDirectory(directory);
}
}
foreach (var file in filePath)
{
if (File.Exists(file))
{
_otaClient.DeleteFile(file);
}
}
//恢复旧版本文件
_otaClient.ExtractDirectory(previousBackupPath, appDir);
//删除旧版本备份
_otaClient.DeleteFile(previousBackupPath);
}
}