diff --git a/AppShell.xaml.cs b/AppShell.xaml.cs index c8445dc..cfbca3e 100644 --- a/AppShell.xaml.cs +++ b/AppShell.xaml.cs @@ -13,22 +13,21 @@ namespace SunlightAggregationTerminal } - private void Shell_Loaded(object sender, EventArgs e) + private async void Shell_Loaded(object sender, EventArgs e) { //打开登录 if (!App.GlobalData.LogNo) { var logpage = new View.LogPage(); - Navigation.PushModalAsync(new NavigationPage(logpage)); + await Navigation.PushModalAsync(new NavigationPage(logpage)); } else {//发送登录请求 - /* var dat = TcpServer.Query(""); - if (dat != null) + if (await AppModels.LogIn()) {//拒绝登陆时打开登录页面 var logpage = new View.LogPage(); - Navigation.PushModalAsync(logpage); - }*/ + await Navigation.PushModalAsync(logpage); + } } } } diff --git a/Class/SQLiteConfig.cs b/Class/SQLiteConfig.cs index 6b4b8b9..a565180 100644 --- a/Class/SQLiteConfig.cs +++ b/Class/SQLiteConfig.cs @@ -234,10 +234,15 @@ namespace SunlightAggregationTerminal.Class reader.Close(); // 记得关闭 Reader // 检查并添加缺失字段 (直接拼接 SQL) - // 检查 Enterprise - if (!existingColumns.Contains("Enterprise")) + if (!existingColumns.Contains("START")) { - string sql = "ALTER TABLE Server ADD COLUMN Enterprise TEXT NULL;"; + string sql = "ALTER TABLE Server ADD COLUMN START BOOL DEFAULT (0);"; + SQLitedata.ExecuteNonQuery(sql, null); + } + // 检查 Server + if (!existingColumns.Contains("Server")) + { + string sql = "ALTER TABLE Server ADD COLUMN Server TEXT NULL;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 ServerID @@ -300,7 +305,8 @@ namespace SunlightAggregationTerminal.Class // 建表语句 string createSql = @" CREATE TABLE Server ( - Enterprise TEXT, + START BOOL DEFAULT (0), + Server TEXT, ServerID TEXT );"; diff --git a/Models/AppModels.cs b/Models/AppModels.cs index c80c9a9..174ee16 100644 --- a/Models/AppModels.cs +++ b/Models/AppModels.cs @@ -66,6 +66,36 @@ namespace SunlightAggregationTerminal.Models return userdata; } + + public async static Task LogIn() + { + App.GlobalData.LogNo = false; + + //发生登录请求 + + // 创建一个 5 秒的延时任务 + Task delayTask = Task.Delay(15000); + // 创建一个监测任务,不断检查变量 + Task monitorTask = Task.Run(async () => + { + while (!App.GlobalData.LogNo) + { + // 每隔 100 毫秒检查一次,避免 CPU 占用过高 + await Task.Delay(100); + } + }); + // 使用 Task.WhenAny 等待任意一个任务完成 + await Task.WhenAny(delayTask, monitorTask); + + if (App.GlobalData.LogNo) + { + return true; + } + else + { + return false; + } + } public static string GetAppUniqueId() { @@ -85,5 +115,25 @@ namespace SunlightAggregationTerminal.Models 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(); + } + } } } diff --git a/QueryPage.xaml.cs b/QueryPage.xaml.cs index f838c4b..4da29f8 100644 --- a/QueryPage.xaml.cs +++ b/QueryPage.xaml.cs @@ -8,14 +8,13 @@ public partial class QueryPage : ContentPage public static Action? OnScanQuery; public QueryPage() - { - InitializeComponent(); + { + InitializeComponent(); - WeakReferenceMessenger.Default.Register(this, (r, scannedValue) => - { - ResultEntry.Text = scannedValue; - }); - }; + WeakReferenceMessenger.Default.Register(this, (r, scannedValue) => + { + ResultEntry.Text = scannedValue; + }); } private async void OnScanButtonClicked(object sender, EventArgs e) { diff --git a/View/LogPage.xaml b/View/LogPage.xaml index 45a2257..5a2c1b7 100644 --- a/View/LogPage.xaml +++ b/View/LogPage.xaml @@ -3,25 +3,29 @@ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="SunlightAggregationTerminal.View.LogPage" Title="登录"> - - - + MaximumWidthRequest="550"> + + + + - + - - - + + + + + + + + + + + - + - + ? OnScanProfile; + public ObservableCollection Items { get; } + public LogPage() { InitializeComponent(); WeakReferenceMessenger.Default.Register(this, (r, scannedValue) => { - Enterprise.Text = scannedValue; + SERVERIP.Text = scannedValue; }); + + //可用服务器列表 + AppModels.sqliteHelper.Open(); + var userdata = AppModels.sqliteHelper.ExecuteDataSet("select * from Server", null); + AppModels.sqliteHelper.Close(); + if (userdata != null) + { + foreach (DataRow dataRow in userdata.Tables[0].Rows) + { + if (dataRow != null) + { + Items?.Add(new ItemOption { + SERVER = dataRow.Field("UserName") ?? "", + SERVERIP = dataRow.Field("UserName") ?? "" + }); + } + } + } + + // 可选:设置默认选中项 + if (Items != null) + { + SERVER.ItemsSource = Items; + SERVER.SelectedItem = Items[0]; + } + } + + private void SERVER_SelectedIndexChanged(object sender, EventArgs e) + { + var dat = SERVER.SelectedItem as ItemOption; + if (dat != null) + { + SERVERIP.Text = dat.SERVERIP.ToString(); + } } private void OnScanButtonClicked(object sender, EventArgs e) @@ -27,34 +70,43 @@ public partial class LogPage : ContentPage private async void Log_Clicked(object sender, EventArgs e)//登录 { - TcpServer.Configuration(Enterprise.Text, UsernameEntry.Text, PasswordEntry.Text, + TcpServer.Configuration(SERVERIP.Text, UsernameEntry.Text, PasswordEntry.Text, Models.AppModels.GetAppUniqueId()); - // while(!App.GlobalData.LogNo); - /* - var temp_name = AppModels.Select("SELECT * FROM Users WHERE User='" + UsernameEntry.Text + "' LIMIT 1;"); - if (temp_name != null) + if (await AppModels.LogIn()) { - //存在更新账号状态 - //var name = temp_name.Tables[0].AsEnumerable().FirstOrDefault(); + var temp_name = AppModels.Select("SELECT * FROM Users WHERE User='" + UsernameEntry.Text + "' LIMIT 1;")!.Tables[0]; + if (temp_name != null) + { + //存在更新账号状态 + string sql = @"UPDATE Users SET ServerID = '" + SERVERIP.Text + + "', UserPassword = '" + PasswordEntry.Text + + "', LogNo = true WHERE User='" + UsernameEntry.Text + "';"; + AppModels.Updata(sql); + } + else + { + //插入账号 + string sql = @"INSERT INTO Users (User,UserId ,UserName ,UserPassword , + Enterprise ,Department ,ServerID ,Groups , + ProxyID ,LogNo ,LocalAreaNetworkMode ,DarkMode , + MessageNotificationMode ,GUID + )VALUES('" + UsernameEntry.Text + "','SUNLIGHT','SUNLIGHT','" + PasswordEntry.Text + + "','SUNLIGHT','ENGINEER','" + SERVERIP.Text + "','ENGINEER'," + + " '',0,0,0,0,'" + Models.AppModels.GetAppUniqueId() + "');"; + AppModels.INSERT(sql); + } - string sql = @"UPDATE Users SET ServerID = '" + Enterprise.Text - + "', UserPassword = '" + PasswordEntry.Text+ - "', LogNo = true WHERE User='" + UsernameEntry.Text + "';"; - AppModels.Updata(sql); + var temp_server = AppModels.Select("SELECT * FROM Server WHERE ServerID='" + SERVERIP.Text + "' LIMIT 1;")!.Tables[0]; + if (temp_server == null) + { + string sql = @"INSERT INTO Server ( Server, ServerID)VALUES('" + App.GlobalData.Enterprise + "','" + + App.GlobalData.ServerID + "');"; + AppModels.INSERT(sql); + } } - else - { - //插入账号 - string sql = @"INSERT INTO Users (User,UserId ,UserName ,UserPassword , - Enterprise ,Department ,ServerID ,Groups , - ProxyID ,LogNo ,LocalAreaNetworkMode ,DarkMode , - MessageNotificationMode ,GUID - )VALUES('"+ UsernameEntry.Text + "','SUNLIGHT','SUNLIGHT','"+ PasswordEntry.Text + - "','SUNLIGHT','ENGINEER','"+ Enterprise.Text + "','ENGINEER',"+ - " '',0,0,0,0,'" + Models.AppModels.GetAppUniqueId() + "');"; - AppModels.INSERT(sql); - }*/ await Navigation.PopModalAsync(); } + + } \ No newline at end of file