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; /// /// 启动页 /// [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(); } /// /// 监听系统初始化 /// /// /// [EventAction(EventType.SetupNotify)] public void SetupCallBack(EventType type, string message) { StartUpMessage = message; } /// /// 这里进行系统初始化操作 /// 这里的异常需要抛出到上层 /// 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); } } /// /// 执行初始化 /// /// private Task 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); } /// /// 初始化相机参数 /// 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; } }