You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

205 lines
8.3 KiB

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}");
}
}
}
}