135 lines
3.6 KiB
C#
135 lines
3.6 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|