Dispenser/DispenserUI/ViewModels/SplashVM.cs

135 lines
3.6 KiB
C#
Raw Normal View History

2024-08-16 07:20:09 +00:00
using System;
using System.Threading;
using System.Threading.Tasks;
using Avalonia.Controls;
using DispenserCommon.Aop;
using DispenserCommon.DB;
using DispenserCommon.Events;
using DispenserCommon.Ioc;
using DispenserCore.Service;
using DispenserHal.Camera.DTO;
using DispenserHal.Camera.Factory;
using DispenserUI.Utils;
using ReactiveUI;
namespace DispenserUI.ViewModels;
/// <summary>
/// 启动页
/// </summary>
[Component, GlobalTry]
public class SplashVM : ViewModelBase
{
// 这个值后续可以通过配置文件来读取
private string _applicationName = "海炬固晶机HG50";
private readonly CancellationTokenSource _cts = new();
private string _startUpMessage = "系统初始化中...";
private readonly CameraParamsService _cameraParamsService = new();
public string StartUpMessage
{
get => _startUpMessage;
set => this.RaiseAndSetIfChanged(ref _startUpMessage, value);
}
public string ApplicationName
{
get => _applicationName;
set => this.RaiseAndSetIfChanged(ref _applicationName, value);
}
public CancellationToken CancellationToken => _cts.Token;
public void Cancel()
{
_cts.Cancel();
}
/// <summary>
/// 监听系统初始化
/// </summary>
/// <param name="type"></param>
/// <param name="message"></param>
[EventAction(EventType.SetupNotify)]
public void SetupCallBack(EventType type, string message)
{
StartUpMessage = message;
}
/// <summary>
/// 这里进行系统初始化操作
/// 这里的异常需要抛出到上层
/// </summary>
public async Task Init(Window window)
{
var initTask = DoInit();
if (await Task.WhenAny(initTask, Task.Delay(100000, CancellationToken)) == initTask)
{
var res = await initTask;
if (!res)
{
await ConfirmDialog.ToConfirm("系统初始化失败!");
Environment.Exit(1);
}
StartUpMessage = "系统初始化完成,正在进入系统!";
await Task.Delay(500, CancellationToken);
}
else
{
// 启动超时,弹出弹出,确认后关闭程序
StartUpMessage = "系统初始化超时,请检查网络连接!";
var confirm = await ConfirmDialog.ToConfirm("系统初始化超时,请检查配置后重试!");
if (confirm) Environment.Exit(1);
}
}
/// <summary>
/// 执行初始化
/// </summary>
/// <returns></returns>
private Task<bool> DoInit()
{
return Task.Run(() =>
{
try
{
// 进行数据库初始化校验
DatabaseInitializer.Initialize();
Thread.Sleep(300);
// 初始化相机连接
InitCameraParams();
CameraManager.Connect();
Thread.Sleep(300);
return Task.FromResult(true);
}
catch (Exception e)
{
Console.WriteLine($"系统初始化异常: {e}");
return Task.FromResult(false);
}
}, CancellationToken);
}
/// <summary>
/// 初始化相机参数
/// </summary>
private void InitCameraParams()
{
var cameraParams = _cameraParamsService.GetCameraParams();
if (cameraParams == null) return;
CameraConfig.Dll = cameraParams.Dll;
CameraConfig.Sdk = cameraParams.Sdk;
CameraConfig.CameraSn = cameraParams.CameraSn;
CameraConfig.ScaleRatio = cameraParams.ScaleRatio;
}
}