整合管理器应用端(MAUI跨平台)
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.

175 lines
6.6 KiB

using CommunityToolkit.Mvvm.ComponentModel;
using SunlightAggregationTerminal.Class;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using TouchSocket.Core;
namespace SunlightAggregationTerminal.Models
{
public class AppModels : ObservableObject
{
public static SqliteHelper sqliteHelper = SQLiteConfig.Config(Path.Combine(FileSystem.AppDataDirectory, "MyAppData.db"))!; //数据库连接路径(获取各平台的应用数据目录)
private Timer timer;
public AppModels()
{
if(sqliteHelper != null)
{//获取配置信息
sqliteHelper.Open();
DataSet? userdata = sqliteHelper.ExecuteDataSet("select * from Users where LogNo = 1", null);
sqliteHelper.Close();
if (userdata != null)
{
if (userdata.Tables[0].Rows.Count > 0)
{
DataRow dat = userdata.Tables[0].Rows[0];
if (dat != null)
{
App.GlobalData.UserName = dat.Field<string>("UserName") ?? "";
App.GlobalData.UserId = dat.Field<string>("UserID") ?? "";
App.GlobalData.User = dat.Field<string>("User") ?? "";
App.GlobalData.UserPassword = dat.Field<string>("UserPassword") ?? "";
App.GlobalData.Enterprise = dat.Field<string>("Enterprise") ?? "";
App.GlobalData.Department = dat.Field<string>("Department") ?? "";
App.GlobalData.Groups = dat.Field<string>("Groups") ?? "";
App.GlobalData.ServerID = dat.Field<string>("ServerID") ?? "";
App.GlobalData.ServerHTTP = dat.Field<string>("ServerHTTP") ?? "";
App.GlobalData.ProxyID = dat.Field<string>("ProxyID") ?? "";
App.GlobalData.LogNo = Convert.ToBoolean(dat.Field<object>("LogNo"));
App.GlobalData.LocalAreaNetworkMode = Convert.ToBoolean(dat.Field<object>("LocalAreaNetworkMode"));
App.GlobalData.DarkMode = Convert.ToBoolean(dat.Field<object>("DarkMode"));
App.GlobalData.MessageNotificationMode = Convert.ToBoolean(dat.Field<object>("MessageNotificationMode"));
App.GlobalData.NotificationID = dat.Field<string>("NotificationID")?? "0";
}
}
}
}
//启动通知轮询延迟120s启动周期600s
timer = new Timer(TimerNotification, null, TimeSpan.FromSeconds(120), TimeSpan.FromSeconds(10));
}
//轮询通知的定时任务
static void TimerNotification(object? state)
{
if (App.GlobalData.LogNo)//已经登录
{
Dictionary<string, object> NotificationDictionary = new Dictionary<string, object>();
NotificationDictionary.Add("Command", "Notification");
NotificationDictionary.Add("StartTime", App.GlobalData.NotificationID);
NotificationDictionary.Add("EndTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
DataReceived.Transmit(NotificationDictionary.ToJsonString());
}
}
public static void Updata(string sql)
{
sqliteHelper.Open();
sqliteHelper.ExecuteNonQuery(sql, null);
sqliteHelper.Close();
}
public static void INSERT(string sql)
{
sqliteHelper.Open();
sqliteHelper.ExecuteNonQuery(sql, null);
sqliteHelper.Close();
}
public static DataSet? Select(string sql)
{
sqliteHelper.Open();
var userdata = sqliteHelper.ExecuteDataSet(sql, null);
sqliteHelper.Close();
return userdata;
}
public async static Task<bool> LogIn()
{
App.GlobalData.LogNo = false;
// await WebSocketServer.WebSocketClient();
//发送登录请求
if (App.GlobalData.LocalAreaNetworkMode)
{
//tcp
TcpServer.Configuration(App.GlobalData.ServerID,
App.GlobalData.User, App.GlobalData.UserPassword,
GetAppUniqueId());
}
else
{
//http
HttpServer.Configuration(App.GlobalData.ServerHTTP,
App.GlobalData.User, App.GlobalData.UserPassword,
GetAppUniqueId());
}
// 创建一个 15 秒的延时任务
Task delayTask = Task.Delay(15000);
// 创建一个监测任务,不断检查变量
Task monitorTask = Task.Run(async () =>
{
while (!App.GlobalData.LogNo)
{
// 每隔 100 毫秒检查一次,避免 CPU 占用过高
await Task.Delay(1000);
}
});
// 使用 Task.WhenAny 等待任意一个任务完成
await Task.WhenAny(delayTask, monitorTask);
if (App.GlobalData.LogNo)
{
return true;
}
else
{
return false;
}
}
public static string GetAppUniqueId()
{
const string key = "sunlight_app_unique_id";
// 尝试从安全存储中读取
string? id = SecureStorage.GetAsync(key).Result;
if (string.IsNullOrEmpty(id))
{
// 如果不存在,生成一个新的 GUID
id = Guid.NewGuid().ToString();
// 保存到安全存储
SecureStorage.SetAsync(key, id).Wait();
}
return id;
}
public static string? GetSERVER()
{
const string key = "sunlight_server";
// 尝试从安全存储中读取
string? dat = SecureStorage.GetAsync(key).Result;
return dat;
}
public static void GetSERVERWait(string dat)
{
const string key = "sunlight_server";
if (string.IsNullOrEmpty(dat))
{
// 如果不存在,生成一个新的 GUID
dat = Guid.NewGuid().ToString();
// 保存到安全存储
SecureStorage.SetAsync(key, dat).Wait();
}
}
}
}