using IOTContainer.Common; using IOTContainer.Communication; using IOTContainer.MvvmBase; using IOTContainer.View; using Sentry; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Threading; namespace IOTContainer.ViewModel { public class InitialViewModel: ViewModelBase { [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr FindWindow(string IpClassName, string IpWindowName); DispatcherTimer timer = new DispatcherTimer(); private string _message; public string Message { get { return _message; } set { base.SetProperty(ref _message, value, "Message"); } } public InitialViewModel(bool isRegister) { //性能预警监测 //timer.Tick += new EventHandler(timer_Tick); //timer.Interval = TimeSpan.FromMinutes(30); //timer.Start(); Task.Run(() => { Init(isRegister); }); } private void timer_Tick(object sender, EventArgs e) { try { var CpuUsedRate = SystemUsage.GetCpuUsedRate(); var MemoryUsedRate = SystemUsage.GetMemoryUsedRate(); var UsedDiskPercent = SystemUsage.GetUsedDiskPercent(); if (CpuUsedRate > 90 || MemoryUsedRate > 90 || UsedDiskPercent > 90) { SentrySdk.Init(""); SentrySdk.ConfigureScope(scope => { scope.SetTag("项目名称", ComParameters.Parameters.projectName); scope.SetTag("设备名称", ComParameters.Parameters.devName); scope.SetTag("设备IP", ComParameters.Parameters.ip); scope.Contexts["性能信息"] = new { CPU占用率 = CpuUsedRate, 内存占用率 = MemoryUsedRate, 磁盘占用率 = UsedDiskPercent }; }); SentrySdk.CaptureMessage(ComParameters.Parameters.projectName+"_" + ComParameters.Parameters.ip+":性能异常报警"); } } catch (Exception ex) { Log.MyLog.WriteLogFile($"性能监测失败:{ex}"); } } private void Init(bool isRegister) { try { var msg = ""; Message = "初始化中"; if (isRegister)//首次 { //设备激活api 获取mqtt地址和端口、开启mqtt Message = "设备激活中"; HttpComm.Http.Activate(out msg); if (!string.IsNullOrEmpty(msg)) { LocalStorage.DelPipRow("infos", ConfigKey.devCode); LocalStorage.DelPipRow("infos", ConfigKey.devName); Message = msg; ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() => { var mess = new MessBoxWindow(msg, false) { Owner = Application.Current.MainWindow, WindowStartupLocation = WindowStartupLocation.CenterOwner }; mess.ShowDialog(); }); return; } } else { //上传前一天的日志文件 HttpComm.Http.UploadLogFile(-1); } Task.Run(() => { Message = "开启MQTT服务"; ComParameters.Parameters.MqttClient = new MqttClientCom(); ComParameters.Parameters.MqttClient.Start(ComParameters.Parameters.devCode); }); //检查是否有需要更新的APP和应用 Message = "检查有无更新版本"; HttpComm.Http.GetAppPackage(); //上传版本号 Message = "上传版本号"; HttpComm.Http.UploadVersion(); //获取下载地址 Message = "获取下载地址"; HttpComm.Http.GetDownloadUrl(); //重新获取一次屏保设置 Message = "获取屏保配置"; HttpComm.Http.GetProtectation(); //同步服务器时间 Message = "同步服务器时间"; HttpComm.Http.getCurrentTimestamp(); //下载分屏节目 Message = "下载分屏节目"; HttpComm.Http.DownResource(); //检查设备有无设置开关机时间 Message = "设置设备开关机时间"; HttpComm.Http.getMachineOnOffTime(); switch (ComParameters.Parameters.devType) { case "导视": case "会议室": { //下载离线接口文件 Message = "获取离线接口文件"; HttpComm.Http.GetInterfaceApi(); //下载离线资源文件 Message = "获取离线资源文件"; HttpComm.Http.GetFileSource(); break; } case "信发": { break; } default: break; } Message = "完成"; #region 添加进程守护 Task.Run(() => { //进程守护 ExternalCall.ContainerServiceLoader(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "IOTContainer.exe")); //设置开机自启动 ExternalCall.SetContainerStart(); //设置程序延迟启动 //ExternalCall.DelayContainerStart(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DelayStart.bat")); }); #endregion ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() => { ComParameters.Parameters.MainViewModel.MainUserControl = new VersionInfoView(); switch (ComParameters.Parameters.devType) { case "导视": case "会议室": { if (!string.IsNullOrEmpty(ComParameters.Parameters.webVersion)) { var web = new EdgeWindow(); web.Show(); WinApi.FindSetTop(null, "EdgeWindow"); } break; } case "信发": { if (!ComParameters.Parameters.IsPlay) { ComParameters.Parameters.IsPlay = true; var scerrnview = new ScreenWindowNew(0); scerrnview.Show(); } break; } } }); //关闭桌面 ExternalCall.CloseExplorer(); } catch (Exception ex) { Log.MyLog.WriteLogFile($"设备启动失败:{ex}"); } } } }