forked from yanw/App_win_iot_V2.0
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
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}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|