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("UserName") ?? ""; App.GlobalData.UserId = dat.Field("UserID") ?? ""; App.GlobalData.User = dat.Field("User") ?? ""; App.GlobalData.UserPassword = dat.Field("UserPassword") ?? ""; App.GlobalData.Enterprise = dat.Field("Enterprise") ?? ""; App.GlobalData.Department = dat.Field("Department") ?? ""; App.GlobalData.Groups = dat.Field("Groups") ?? ""; App.GlobalData.ServerID = dat.Field("ServerID") ?? ""; App.GlobalData.ServerHTTP = dat.Field("ServerHTTP") ?? ""; App.GlobalData.ProxyID = dat.Field("ProxyID") ?? ""; App.GlobalData.LogNo = Convert.ToBoolean(dat.Field("LogNo")); App.GlobalData.LocalAreaNetworkMode = Convert.ToBoolean(dat.Field("LocalAreaNetworkMode")); App.GlobalData.DarkMode = Convert.ToBoolean(dat.Field("DarkMode")); App.GlobalData.MessageNotificationMode = Convert.ToBoolean(dat.Field("MessageNotificationMode")); App.GlobalData.NotificationID = dat.Field("NotificationID")?? "0"; } } } } //启动通知轮询延迟120s启动周期600s timer = new Timer(TimerNotification, null, TimeSpan.FromSeconds(120), TimeSpan.FromSeconds(120)); } //轮询通知的定时任务 static void TimerNotification(object? state) { if (App.GlobalData.LogNo)//已经登录 { Dictionary NotificationDictionary = new Dictionary(); 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 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(); } } } }