diff --git a/ToolsForm/.idea/.idea.ToolsForm/.idea/avalonia.xml b/ToolsForm/.idea/.idea.ToolsForm/.idea/avalonia.xml index d03836e..3d2141e 100644 --- a/ToolsForm/.idea/.idea.ToolsForm/.idea/avalonia.xml +++ b/ToolsForm/.idea/.idea.ToolsForm/.idea/avalonia.xml @@ -17,9 +17,11 @@ + + diff --git a/ToolsForm/.idea/.idea.ToolsForm/.idea/workspace.xml b/ToolsForm/.idea/.idea.ToolsForm/.idea/workspace.xml index 90a4ea4..7704fb1 100644 --- a/ToolsForm/.idea/.idea.ToolsForm/.idea/workspace.xml +++ b/ToolsForm/.idea/.idea.ToolsForm/.idea/workspace.xml @@ -8,43 +8,159 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + - + + + + + - + + + + - + - + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -56,6 +172,7 @@ + @@ -63,9 +180,16 @@ + + + + + + + @@ -73,8 +197,10 @@ + + @@ -91,12 +217,20 @@ + + + + + + + + @@ -105,6 +239,7 @@ + @@ -131,14 +266,14 @@ "ASKED_ADD_EXTERNAL_FILES": "true", "RunOnceActivity.ShowReadmeOnStart": "true", "RunOnceActivity.git.unshallow": "true", - "XThreadsFramesViewSplitterKey": "0.5078125", + "XThreadsFramesViewSplitterKey": "0.5077882", "git-widget-placeholder": "main", "node.js.detected.package.eslint": "true", "node.js.detected.package.tslint": "true", "node.js.selected.package.eslint": "(autodetect)", "node.js.selected.package.tslint": "(autodetect)", "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "Console", + "settings.editor.selected.configurable": "preferences.keymap", "vue.rearranger.settings.migration": "true", "发布到文件夹.Publish ToolsForm to folder (1).executor": "Run", "发布到文件夹.Publish ToolsForm to folder (2).executor": "Run", @@ -149,11 +284,19 @@ "发布到文件夹.目录.executor": "Run" } } - + + + + + + + + + @@ -178,7 +321,9 @@ + + @@ -234,6 +379,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -261,30 +427,69 @@ file://$PROJECT_DIR$/ToolsForm/Views/IDEWindow.axaml.cs - 135 + 136 - - file://$PROJECT_DIR$/ToolsForm/Views/RecordingWindow.axaml.cs - 52 + 53 - - + + file://$PROJECT_DIR$/ToolsForm/Views/MainWindow.axaml.cs + 200 + + + + + + + + + file://$PROJECT_DIR$/ToolsForm/Views/UploadExperConfirmWindow2.axaml.cs + 45 + + + + + + + + + file://$PROJECT_DIR$/ToolsForm/Views/ExperimentWindow2.axaml.cs + 49 + + + + + + + diff --git a/ToolsForm/ToolsForm.sln.DotSettings.user b/ToolsForm/ToolsForm.sln.DotSettings.user index 4532e1d..e291c12 100644 --- a/ToolsForm/ToolsForm.sln.DotSettings.user +++ b/ToolsForm/ToolsForm.sln.DotSettings.user @@ -1,10 +1,15 @@  True ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded + ForceIncluded + ForceIncluded + ForceIncluded ForceIncluded + ForceIncluded <AssemblyExplorer> <Assembly Path="C:\Users\PC\.nuget\packages\avalonia\11.2.1\ref\net8.0\Avalonia.Controls.dll" /> </AssemblyExplorer> \ No newline at end of file diff --git a/ToolsForm/ToolsForm/App.axaml.cs b/ToolsForm/ToolsForm/App.axaml.cs index 7292dac..682cd3c 100644 --- a/ToolsForm/ToolsForm/App.axaml.cs +++ b/ToolsForm/ToolsForm/App.axaml.cs @@ -6,6 +6,7 @@ using Avalonia.Data.Core.Plugins; using Avalonia.Markup.Xaml; using Avalonia.Media; using Tmds.DBus.Protocol; +using ToolsForm.Manager; using ToolsForm.Models; using ToolsForm.Views; @@ -25,8 +26,8 @@ public class App : Application var webSocketManager = WebSocketManager.GetInstance(); - - + + APIInterface.url = args[1]; Console.WriteLine(args[0]); webSocketManager.Connect(args[0]); @@ -44,7 +45,7 @@ public class App : Application // Line below is needed to remove Avalonia data validation. // Without this line you will get duplicate validations from both Avalonia and CT BindingPlugins.DataValidators.RemoveAt(0); - desktop.MainWindow = new MainWindow + desktop.MainWindow = new StartWindow() { // DataContext = new MainWindowViewModel(), }; diff --git a/ToolsForm/ToolsForm/Assets/img/Experiment/总览-默认.png b/ToolsForm/ToolsForm/Assets/img/Experiment/总览-默认.png new file mode 100644 index 0000000..4269953 Binary files /dev/null and b/ToolsForm/ToolsForm/Assets/img/Experiment/总览-默认.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/Experiment/菜单3 - 副本.png b/ToolsForm/ToolsForm/Assets/img/Experiment/菜单3 - 副本.png new file mode 100644 index 0000000..4a6e3a6 Binary files /dev/null and b/ToolsForm/ToolsForm/Assets/img/Experiment/菜单3 - 副本.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/Experiment/菜单3.png b/ToolsForm/ToolsForm/Assets/img/Experiment/菜单3.png new file mode 100644 index 0000000..13667cc Binary files /dev/null and b/ToolsForm/ToolsForm/Assets/img/Experiment/菜单3.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/Overview/tiao.png b/ToolsForm/ToolsForm/Assets/img/Overview/tiao.png new file mode 100644 index 0000000..cb6b0c1 Binary files /dev/null and b/ToolsForm/ToolsForm/Assets/img/Overview/tiao.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/UploadExperimentMessage/感叹号.png b/ToolsForm/ToolsForm/Assets/img/UploadExperimentMessage/感叹号.png new file mode 100644 index 0000000..e66ace7 Binary files /dev/null and b/ToolsForm/ToolsForm/Assets/img/UploadExperimentMessage/感叹号.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/UploadExperimentMessage/提交按钮.png b/ToolsForm/ToolsForm/Assets/img/UploadExperimentMessage/提交按钮.png new file mode 100644 index 0000000..581f887 Binary files /dev/null and b/ToolsForm/ToolsForm/Assets/img/UploadExperimentMessage/提交按钮.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/切换新-悬浮.png b/ToolsForm/ToolsForm/Assets/img/切换新-悬浮.png new file mode 100644 index 0000000..acc8d16 Binary files /dev/null and b/ToolsForm/ToolsForm/Assets/img/切换新-悬浮.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/切换新-默认.png b/ToolsForm/ToolsForm/Assets/img/切换新-默认.png new file mode 100644 index 0000000..4536d64 Binary files /dev/null and b/ToolsForm/ToolsForm/Assets/img/切换新-默认.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/总览-悬浮.png b/ToolsForm/ToolsForm/Assets/img/总览-悬浮.png index 15fb146..4bf73e4 100644 Binary files a/ToolsForm/ToolsForm/Assets/img/总览-悬浮.png and b/ToolsForm/ToolsForm/Assets/img/总览-悬浮.png differ diff --git a/ToolsForm/ToolsForm/Assets/img/总览-默认.png b/ToolsForm/ToolsForm/Assets/img/总览-默认.png index ea10f66..00a475a 100644 Binary files a/ToolsForm/ToolsForm/Assets/img/总览-默认.png and b/ToolsForm/ToolsForm/Assets/img/总览-默认.png differ diff --git a/ToolsForm/ToolsForm/Manager/APIInterface.cs b/ToolsForm/ToolsForm/Manager/APIInterface.cs new file mode 100644 index 0000000..94c2f6b --- /dev/null +++ b/ToolsForm/ToolsForm/Manager/APIInterface.cs @@ -0,0 +1,6 @@ +namespace ToolsForm.Manager; + +public static class APIInterface +{ + public static string url; +} diff --git a/ToolsForm/ToolsForm/Manager/AppWindowManager.cs b/ToolsForm/ToolsForm/Manager/AppWindowManager.cs index 1aaaf5e..06cd09a 100644 --- a/ToolsForm/ToolsForm/Manager/AppWindowManager.cs +++ b/ToolsForm/ToolsForm/Manager/AppWindowManager.cs @@ -34,6 +34,7 @@ namespace ToolsForm.Models public static ExperimentWindow? ExperimentWindow; //暂存 public static UploadExperimentWindow? UploadExperimentWindow; //暂存 public static UploadExperimentMessageWindow? UploadExperimentMessageWindow; //暂存 + public static UploadExperConfirmWindow2? UploadExperConfirmWindow2; //暂存 public static AIWindow? AiWindow; //AI public static ExperimentWindow2? ExperimentWindow2; //切换窗口 @@ -172,6 +173,7 @@ namespace ToolsForm.Models CloseWindow(ref IdeErrorWindow); CloseWindow(ref UploadExperimentMessageWindow); CloseWindow(ref AiWindow); + CloseWindow(ref UploadExperConfirmWindow2); } } } \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Manager/WindowApi.cs b/ToolsForm/ToolsForm/Manager/WindowApi.cs index 450fe1b..f9488b1 100644 --- a/ToolsForm/ToolsForm/Manager/WindowApi.cs +++ b/ToolsForm/ToolsForm/Manager/WindowApi.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Runtime.InteropServices; public static class WindowApi @@ -28,4 +29,11 @@ public static class WindowApi public int Right; public int Bottom; } + + public static bool isSubmiteBttonOpen = true; + + public static List Tasks; + + + public static string score; } \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Models/DeepSeekClient.cs b/ToolsForm/ToolsForm/Models/DeepSeekClient.cs new file mode 100644 index 0000000..54eef86 --- /dev/null +++ b/ToolsForm/ToolsForm/Models/DeepSeekClient.cs @@ -0,0 +1,57 @@ +using System; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; + +public class DeepSeekClient +{ + private readonly HttpClient _httpClient; + private readonly string _apiKey; + + public DeepSeekClient(string apiKey) + { + _httpClient = new HttpClient(); + _apiKey = apiKey; + _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {_apiKey}"); + } + + public async Task SendMessageAsync(string userInput) + { + var requestUrl = "https://api.deepseek.com/chat/completions"; + var requestBody = new + { + model = "deepseek-chat", + messages = new[] + { + new { role = "user", content = userInput } + } + }; + var jsonContent = JsonConvert.SerializeObject(requestBody); + var httpContent = new StringContent(jsonContent, Encoding.UTF8, "application/json"); + + var response = await _httpClient.PostAsync(requestUrl, httpContent); + response.EnsureSuccessStatusCode(); + + var responseContent = await response.Content.ReadAsStringAsync(); + var result = JsonConvert.DeserializeObject(responseContent); + + return result.Choices[0].Message.Content; + } +} + +public class DeepSeekResponse +{ + public Choice[] Choices { get; set; } +} + +public class Choice +{ + public Message Message { get; set; } +} + +public class Message +{ + public string Role { get; set; } + public string Content { get; set; } +} \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Models/RaadCodeModel.cs b/ToolsForm/ToolsForm/Models/RaadCodeModel.cs index b417266..e7880e6 100644 --- a/ToolsForm/ToolsForm/Models/RaadCodeModel.cs +++ b/ToolsForm/ToolsForm/Models/RaadCodeModel.cs @@ -4,4 +4,9 @@ public class RaadCodeModel { public int Process { get; set; } public bool IsSucess { get; set; } +} + +public class ScoreModel +{ + public string Score { get; set; } } \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Models/ToolsEventModel.cs b/ToolsForm/ToolsForm/Models/ToolsEventModel.cs index 3f49307..29558a5 100644 --- a/ToolsForm/ToolsForm/Models/ToolsEventModel.cs +++ b/ToolsForm/ToolsForm/Models/ToolsEventModel.cs @@ -52,6 +52,7 @@ public enum ToolsEventEnum /// 缩略图 /// Thumbnail, - HuiFu + HuiFu, + score } \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Program.cs b/ToolsForm/ToolsForm/Program.cs index a997d96..bbbd80d 100644 --- a/ToolsForm/ToolsForm/Program.cs +++ b/ToolsForm/ToolsForm/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using Avalonia; namespace ToolsForm; @@ -11,6 +12,51 @@ internal sealed class Program [STAThread] public static void Main(string[] args) { + if (args.Length > 0) + { + string arg = args[0]; + + // 检查是否包含WithSubmitButton + if (arg.StartsWith("WithSubmitButton")) + { + WindowApi.isSubmiteBttonOpen = true; + + // 检查是否有任务详情 + if (arg.Contains("taskdetail:")) + { + // 分割参数获取任务详情部分 + string taskDetail = arg.Split(new[] { "taskdetail:" }, StringSplitOptions.None)[1]; + + // 进一步按&&分割任务 + string[] tasks = taskDetail.Split(new[] { "&&" }, StringSplitOptions.RemoveEmptyEntries); + + // 存储任务列表以供后续使用 + WindowApi.Tasks = tasks.ToList(); + } + } + else + { + WindowApi.isSubmiteBttonOpen = false; + } + } + else + { + // string s = "WithSubmitButton,taskdetail:&&1、初始化机器人位置&&2、设置机器人名称及颜色&&3、播放背景音乐&&4、设置背景图片&&5、相机环绕点3转&&6、生成机器人整列并跳舞&&7、停止背景音乐并截图"; + // // 检查是否有任务详情 + // if (s.Contains("taskdetail:")) + // { + // // 分割参数获取任务详情部分 + // string taskDetail = s.Split(new[] { "taskdetail:" }, StringSplitOptions.None)[1]; + // + // // 进一步按&&分割任务 + // string[] tasks = taskDetail.Split(new[] { "&&" }, StringSplitOptions.RemoveEmptyEntries); + // + // // 存储任务列表以供后续使用 + // WindowApi.Tasks = tasks.ToList(); + // } + + } + BuildAvaloniaApp() .StartWithClassicDesktopLifetime(args); } @@ -19,7 +65,7 @@ internal sealed class Program public static AppBuilder BuildAvaloniaApp() { return AppBuilder.Configure() - .UsePlatformDetect() + .UsePlatformDetect() .WithInterFont() .LogToTrace(); } diff --git a/ToolsForm/ToolsForm/ToolsForm.csproj b/ToolsForm/ToolsForm/ToolsForm.csproj index 63feb1d..43a14ef 100644 --- a/ToolsForm/ToolsForm/ToolsForm.csproj +++ b/ToolsForm/ToolsForm/ToolsForm.csproj @@ -24,12 +24,12 @@ - - - - + + + + - + diff --git a/ToolsForm/ToolsForm/ToolsForm.sln b/ToolsForm/ToolsForm/ToolsForm.sln new file mode 100644 index 0000000..94be367 --- /dev/null +++ b/ToolsForm/ToolsForm/ToolsForm.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.2.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToolsForm", "ToolsForm.csproj", "{734CD64B-E4C7-1BC7-8E9A-F413C77975C3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {734CD64B-E4C7-1BC7-8E9A-F413C77975C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {734CD64B-E4C7-1BC7-8E9A-F413C77975C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {734CD64B-E4C7-1BC7-8E9A-F413C77975C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {734CD64B-E4C7-1BC7-8E9A-F413C77975C3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8498BA7B-6EA0-4754-8C7D-53849F7E39FE} + EndGlobalSection +EndGlobal diff --git a/ToolsForm/ToolsForm/Views/AIWindow.axaml.cs b/ToolsForm/ToolsForm/Views/AIWindow.axaml.cs index 823b4be..8ad9cd6 100644 --- a/ToolsForm/ToolsForm/Views/AIWindow.axaml.cs +++ b/ToolsForm/ToolsForm/Views/AIWindow.axaml.cs @@ -23,7 +23,8 @@ namespace ToolsForm.Views public AIWindow() { InitializeComponent(); - + ShowInTaskbar = false; + Topmost = true; diff --git a/ToolsForm/ToolsForm/Views/DownCodeWindow.axaml b/ToolsForm/ToolsForm/Views/DownCodeWindow.axaml index f411554..a27d6da 100644 --- a/ToolsForm/ToolsForm/Views/DownCodeWindow.axaml +++ b/ToolsForm/ToolsForm/Views/DownCodeWindow.axaml @@ -68,14 +68,14 @@ 0 KB/0 MB - - 0 KB/S - + + + + + + + + + \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Views/DownCodeWindow.axaml.cs b/ToolsForm/ToolsForm/Views/DownCodeWindow.axaml.cs index ec247b9..bedf05c 100644 --- a/ToolsForm/ToolsForm/Views/DownCodeWindow.axaml.cs +++ b/ToolsForm/ToolsForm/Views/DownCodeWindow.axaml.cs @@ -16,19 +16,20 @@ public partial class DownCodeWindow : Window public DownCodeWindow() { InitializeComponent(); - Topmost = true; + Topmost = true; WebSocketManager.GetInstance().OnMessageReceived += HandleWebSocketMessage; - - Jie(); + ShowInTaskbar = false; + + //Jie(); } private void HandleWebSocketMessage(ToolsEventModel eventmodel) { Console.WriteLine("接收到的事件类型: " + eventmodel.eventType); Console.WriteLine("事件数据: " + eventmodel.data); - + if (eventmodel.eventType == "DataReading") { RaadCodeModel raadCodeModel = JsonConvert.DeserializeObject((string)eventmodel.data); @@ -37,22 +38,23 @@ public partial class DownCodeWindow : Window ProgressBar.Value = raadCodeModel.Process; } } - } async void Jie() { await Task.Delay(1000); AppWindowManager.CloseWindow(ref AppWindowManager.DownCodeWindow); - } - + + TextBlock textBlockLeft; + TextBlock textBlockCenter; + private void Window_OnLoaded(object? sender, RoutedEventArgs e) { // 获取三个 TextBlock 的引用 TextBlock textBlockLeft = this.FindControl("TextBlockLeft"); TextBlock textBlockCenter = this.FindControl("TextBlockCenter"); - TextBlock textBlockRight = this.FindControl("TextBlockRight"); + // TextBlock textBlockRight = this.FindControl("TextBlockRight"); // 获取窗口宽度 double windowWidth = this.Bounds.Width; @@ -61,7 +63,7 @@ public partial class DownCodeWindow : Window Typeface typeface = new Typeface(textBlockLeft.FontFamily, FontStyle.Normal, FontWeight.Normal); // 创建 Typeface double leftWidth = MeasureTextWidth(textBlockLeft.Text, typeface, textBlockLeft.FontSize); double centerWidth = MeasureTextWidth(textBlockCenter.Text, typeface, textBlockCenter.FontSize); - double rightWidth = MeasureTextWidth(textBlockRight.Text, typeface, textBlockRight.FontSize); + // double rightWidth = MeasureTextWidth(textBlockRight.Text, typeface, textBlockRight.FontSize); // 设置左侧 TextBlock 的位置 Canvas.SetLeft(textBlockLeft, 40); // 或者你可以设置为 0 @@ -70,13 +72,41 @@ public partial class DownCodeWindow : Window double centerX = (windowWidth - centerWidth) / 2; Canvas.SetLeft(textBlockCenter, centerX); - // 设置右侧 TextBlock 的位置 - double rightX = windowWidth - rightWidth - 40; // 留一些边距 - Canvas.SetLeft(textBlockRight, rightX); - + // // 设置右侧 TextBlock 的位置 + // double rightX = windowWidth - rightWidth - 100; // 留一些边距 + // Canvas.SetLeft(textBlockRight, rightX); + StartDownloadAnimation(); // DownloadCodeAsync(); } + private Random random = new Random(); + async void StartDownloadAnimation() + { + double totalSize = random.Next(1, 5); // 随机总大小(MB) + double progress = 0; + int stepCount = 100; // 总步数 + int stepDelay = 5000 / stepCount; // 10秒完成 + + for (int i = 0; i <= stepCount; i++) + { + progress = (double)i / stepCount * 100; + ProgressBar.Value = progress; + + // 更新下载速度(随机) + double speedLeft = random.Next(10, 100); + double speedRight = random.Next(10, 100); + double currentSize = totalSize * progress / 100; + + TextBlockLeft.Text = $"{speedLeft:F1} KB/S"; + // TextBlockRight.Text = $"{speedRight:F1} KB/S"; + TextBlockCenter.Text = $"{currentSize:F1} MB/{totalSize:F1} MB"; + + await Task.Delay(stepDelay); + } + AppWindowManager.CloseWindow(ref AppWindowManager.DownCodeWindow); + await Task.Delay(500); // 完成后等待半秒 + } + private double MeasureTextWidth(string text, Typeface typeface, double fontSize) { // 创建一个有效的 CultureInfo 对象 @@ -103,10 +133,10 @@ public partial class DownCodeWindow : Window // await Task.Delay(50); // 模拟下载耗时 // } // } - + protected override void OnClosed(EventArgs e) { - base.OnClosed(e); + Console.WriteLine("窗口关闭"); WebSocketManager.GetInstance().OnMessageReceived -= HandleWebSocketMessage; } } \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Views/ExperimentWindow.axaml b/ToolsForm/ToolsForm/Views/ExperimentWindow.axaml index 085501c..9053bc7 100644 --- a/ToolsForm/ToolsForm/Views/ExperimentWindow.axaml +++ b/ToolsForm/ToolsForm/Views/ExperimentWindow.axaml @@ -22,6 +22,9 @@ + + + + + diff --git a/ToolsForm/ToolsForm/Views/StartWindow.axaml.cs b/ToolsForm/ToolsForm/Views/StartWindow.axaml.cs new file mode 100644 index 0000000..b927fb3 --- /dev/null +++ b/ToolsForm/ToolsForm/Views/StartWindow.axaml.cs @@ -0,0 +1,24 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using ToolsForm.Models; + +namespace ToolsForm.Views; + +public partial class StartWindow : Window +{ + public StartWindow() + { + InitializeComponent(); + + + AppWindowManager.ToggleWindow(ref AppWindowManager.MainWindow, () => new MainWindow(), true); + + AppWindowManager.MainWindow.Hide(); + + + AppWindowManager.ToggleWindow(ref AppWindowManager.ExperimentWindow, () => new ExperimentWindow(), false); + ShowInTaskbar = false; + + } +} \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Views/TemporaryStorageMessage.axaml.cs b/ToolsForm/ToolsForm/Views/TemporaryStorageMessage.axaml.cs index 7fdbcf4..575cbf5 100644 --- a/ToolsForm/ToolsForm/Views/TemporaryStorageMessage.axaml.cs +++ b/ToolsForm/ToolsForm/Views/TemporaryStorageMessage.axaml.cs @@ -1,17 +1,22 @@ using System; using System.Globalization; +using System.IO; using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Avalonia.Threading; +using Newtonsoft.Json; using ToolsForm.Models; namespace ToolsForm.Views; public partial class TemporaryStorageMessage : Window { + // 日志文件路径 + private readonly string _logFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "websocket_log.txt"); + public TemporaryStorageMessage() { InitializeComponent(); @@ -20,29 +25,102 @@ public partial class TemporaryStorageMessage : Window TemporarilySuccess.IsVisible = false; Temporarily.IsVisible = true; - + ShowInTaskbar = false; WebSocketManager.GetInstance().OnMessageReceived += HandleWebSocketMessage; + + // 记录应用启动日志 + LogToFile("应用启动,开始监听WebSocket消息"); } private async void HandleWebSocketMessage(ToolsEventModel eventmodel) { - Console.WriteLine("接收到的事件类型: " + eventmodel.eventType); - Console.WriteLine("事件数据: " + eventmodel.data); - - // 根据接收到的数据判断是否显示成功或失败 - if (eventmodel.eventType == "TemporaryStorage") + try { - bool isSuccess = (bool)eventmodel.data; - await ProcessTemporaryStorageAsync(isSuccess); + Console.WriteLine("接收到的事件类型: " + eventmodel.eventType); + Console.WriteLine("事件数据: " + eventmodel.data); + + // 将接收到的消息写入日志文件 + string messageJson = JsonConvert.SerializeObject(eventmodel); + LogToFile($"收到WebSocket消息: {messageJson}"); + + // 显示接收到的消息 + await ShowMessageAsync(eventmodel); + + // 根据接收到的数据处理特定类型的事件 + if (eventmodel.eventType == "TemporaryStorage") + { + // 检查data是否为布尔值或表示完成状态的字符串 + if (eventmodel.data is bool boolValue) + { + await ProcessTemporaryStorageAsync(boolValue); + } + else if (eventmodel.data is string strValue && strValue.Contains("成功")) + { + await ProcessTemporaryStorageAsync(true); + } + else + { + // 其他情况仅显示消息,不处理为失败状态 + } + } } + catch (Exception e) + { + Console.WriteLine(e); + // 将异常信息写入日志文件 + LogToFile($"处理WebSocket消息时发生异常: {e.Message}\n{e.StackTrace}"); + } + } + + // 显示接收到的消息 + private async Task ShowMessageAsync(ToolsEventModel eventmodel) + { + await Dispatcher.UIThread.InvokeAsync(() => + { + // 处理完成后切换画布 + Temporarily.IsVisible = false; + TemporarilySuccess.IsVisible = true; + + // // 获取消息文本并显示 + // string messageText = eventmodel.data?.ToString() ?? "无数据"; + // if (SuccessMessage != null) + // { + // SuccessMessage.Text = $"{eventmodel.eventType}: {messageText}"; + // } + }); + // 3秒后自动隐藏消息 + await Task.Delay(3000); + + await Dispatcher.UIThread.InvokeAsync(() => + { + TemporarilySuccess.IsVisible = false; + }); + } + + // 写入日志文件的方法 + private void LogToFile(string message) + { + try + { + // 创建日志内容,包含时间戳 + string logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] {message}{Environment.NewLine}"; + + // 追加写入文件 + File.AppendAllText(_logFilePath, logEntry); + } + catch (Exception ex) + { + // 如果写入日志文件失败,至少在控制台打印错误 + Console.WriteLine($"写入日志文件失败: {ex.Message}"); + } } private async void Window_Loaded(object sender, RoutedEventArgs e) { - // 在这里调用处理逻辑 - await ProcessTemporaryStorageAsync(false); + // 记录窗口加载事件 + LogToFile("窗口已加载"); } private async Task ProcessTemporaryStorageAsync(bool isSuccess) @@ -69,11 +147,13 @@ public partial class TemporaryStorageMessage : Window TemporarilySuccess.IsVisible = true; // 显示 TemporarilySuccess string currentTime = DateTime.Now.ToString("HH:mm", CultureInfo.InvariantCulture); SuccessMessage.Text = $"代码已暂存 {currentTime}"; // 更新 TextBlock 的文本 + LogToFile($"代码暂存成功 {currentTime}"); } else { TemporarilySuccess.IsVisible = true; // 显示 TemporarilySuccess SuccessMessage.Text = "代码暂存失败"; // 更新 TextBlock 为失败消息 + LogToFile("代码暂存失败"); } }); @@ -88,8 +168,10 @@ public partial class TemporaryStorageMessage : Window // 确保在窗口关闭时取消订阅事件,避免潜在的内存泄漏 protected override void OnClosed(EventArgs e) - { - base.OnClosed(e); + { + Console.WriteLine("窗口关闭"); + LogToFile("窗口已关闭"); WebSocketManager.GetInstance().OnMessageReceived -= HandleWebSocketMessage; + base.OnClosed(e); } } \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Views/TemporaryStorageWindow.axaml.cs b/ToolsForm/ToolsForm/Views/TemporaryStorageWindow.axaml.cs index be3db96..94d91de 100644 --- a/ToolsForm/ToolsForm/Views/TemporaryStorageWindow.axaml.cs +++ b/ToolsForm/ToolsForm/Views/TemporaryStorageWindow.axaml.cs @@ -12,6 +12,7 @@ public partial class TemporaryStorageWindow : Window public TemporaryStorageWindow() { InitializeComponent(); + ShowInTaskbar = false; Topmost = true; } @@ -30,7 +31,7 @@ public partial class TemporaryStorageWindow : Window private void SuccessButton_OnClick(object? sender, RoutedEventArgs e) { AppWindowManager.ToggleWindow(ref AppWindowManager.TemporaryStorageMessage, () => new TemporaryStorageMessage(), false); - AppWindowManager.UpdateWindowPosition(AppWindowManager.TemporaryStorageMessage, 0, 300,AppDataManager.MainType); + AppWindowManager.UpdateWindowPosition(AppWindowManager.TemporaryStorageMessage, 0, 210,AppDataManager.MainType); WebSocketManager.GetInstance().SendMessage(ToolsEventEnum.TemporaryStorage,null); AppWindowManager.CloseWindow(ref AppWindowManager.TemporaryStorageWindow); diff --git a/ToolsForm/ToolsForm/Views/UploadExperConfirmWindow2.axaml b/ToolsForm/ToolsForm/Views/UploadExperConfirmWindow2.axaml new file mode 100644 index 0000000..ff4e274 --- /dev/null +++ b/ToolsForm/ToolsForm/Views/UploadExperConfirmWindow2.axaml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ToolsForm/ToolsForm/Views/UploadExperConfirmWindow2.axaml.cs b/ToolsForm/ToolsForm/Views/UploadExperConfirmWindow2.axaml.cs new file mode 100644 index 0000000..f7428fc --- /dev/null +++ b/ToolsForm/ToolsForm/Views/UploadExperConfirmWindow2.axaml.cs @@ -0,0 +1,63 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Interactivity; +using Avalonia.Markup.Xaml; +using ToolsForm.Models; + +namespace ToolsForm.Views; + +public partial class UploadExperConfirmWindow2 : Window +{ + public UploadExperConfirmWindow2() + { + InitializeComponent(); + ShowInTaskbar = false; + + } + + private void Upload(object? sender, RoutedEventArgs e) + { + + if (AppWindowManager.ExperimentWindow != null) + { + AppWindowManager.ExperimentWindow.Submit(); + } + if (AppWindowManager.ExperimentWindow2 != null) + { + AppWindowManager.ExperimentWindow2.Submit(); + } + + // AppWindowManager.CloseWindow(ref AppWindowManager.UploadExperConfirmWindow2); + + + AppWindowManager.ToggleWindow(ref AppWindowManager.UploadExperimentMessageWindow, () => new UploadExperimentMessageWindow(), false); + + // Point p = GetScreenCenter(); + + AppWindowManager.UploadExperimentMessageWindow.Position = new PixelPoint(AppWindowManager.UploadExperimentWindow.XX-200,AppWindowManager.UploadExperimentWindow.YY-200); + + AppDataManager.isUpload = true; + + AppWindowManager.CloseWindow(ref AppWindowManager.UploadExperimentWindow); + } + + public Point GetScreenCenter() + { + var screens = Screens.All; + if (screens.Count > 0) + { + // 获取主屏幕的尺寸 + var primaryScreen = screens[0]; + double screenWidth = primaryScreen.Bounds.Width; + double screenHeight = primaryScreen.Bounds.Height; + + double centerX = screenWidth / 2; + double centerY = screenHeight / 2; + + return new Point(centerX, centerY); + } + + // 如果没有找到屏幕,返回 (0, 0) + return new Point(0, 0); + } +} \ No newline at end of file diff --git a/ToolsForm/ToolsForm/Views/UploadExperimentMessageWindow.axaml.cs b/ToolsForm/ToolsForm/Views/UploadExperimentMessageWindow.axaml.cs index c557f4f..5c4d77d 100644 --- a/ToolsForm/ToolsForm/Views/UploadExperimentMessageWindow.axaml.cs +++ b/ToolsForm/ToolsForm/Views/UploadExperimentMessageWindow.axaml.cs @@ -11,6 +11,7 @@ public partial class UploadExperimentMessageWindow : Window public UploadExperimentMessageWindow() { InitializeComponent(); + ShowInTaskbar = false; CloseWindow(); } diff --git a/ToolsForm/ToolsForm/Views/UploadExperimentWindow.axaml.cs b/ToolsForm/ToolsForm/Views/UploadExperimentWindow.axaml.cs index 0d4644e..c77dd91 100644 --- a/ToolsForm/ToolsForm/Views/UploadExperimentWindow.axaml.cs +++ b/ToolsForm/ToolsForm/Views/UploadExperimentWindow.axaml.cs @@ -34,11 +34,16 @@ public partial class UploadExperimentWindow : Window public ObservableCollection FileItems { get; set; } = new ObservableCollection(); + public int XX; + public int YY; + + public UploadExperimentWindow() { InitializeComponent(); DataContext = this; // 绑定数据上下文 + ShowInTaskbar = false; // 初始化旋转定时器 _rotationTimer1 = new DispatcherTimer @@ -281,26 +286,16 @@ public partial class UploadExperimentWindow : Window private void OnSubmitButtonClick(object sender, RoutedEventArgs e) { - - - if (AppWindowManager.ExperimentWindow != null) - { - AppWindowManager.ExperimentWindow.Submit(); - } - if (AppWindowManager.ExperimentWindow2 != null) - { - AppWindowManager.ExperimentWindow2.Submit(); - } - - AppWindowManager.ToggleWindow(ref AppWindowManager.UploadExperimentMessageWindow, () => new UploadExperimentMessageWindow(), false); + AppWindowManager.ToggleWindow(ref AppWindowManager.UploadExperConfirmWindow2, () => new UploadExperConfirmWindow2(), false); Point p = GetScreenCenter(); - AppWindowManager.UploadExperimentMessageWindow.Position = new PixelPoint((int)p.X - 226, (int)(p.Y - p.Y / 2)); - - AppDataManager.isUpload = true; + XX = (int)p.X; + YY = (int)p.Y; + Console.WriteLine(p.X); + Console.WriteLine(p.Y); - AppWindowManager.CloseWindow(ref AppWindowManager.UploadExperimentWindow); + AppWindowManager.UploadExperConfirmWindow2.Position=new PixelPoint((int)p.X-200,(int)p.Y-200); } public Point GetScreenCenter() diff --git a/ToolsForm/ToolsForm/bin/Debug/net8.0/net8.0.zip b/ToolsForm/ToolsForm/bin/Debug/net8.0/net8.0.zip new file mode 100644 index 0000000..ca28974 Binary files /dev/null and b/ToolsForm/ToolsForm/bin/Debug/net8.0/net8.0.zip differ diff --git a/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/av_libglesv2.dll b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/av_libglesv2.dll new file mode 100644 index 0000000..c327f9e Binary files /dev/null and b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/av_libglesv2.dll differ diff --git a/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/config.txt b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/config.txt new file mode 100644 index 0000000..aee1646 --- /dev/null +++ b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/config.txt @@ -0,0 +1 @@ +ws://127.0.0.1:8878/tools \ No newline at end of file diff --git a/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/libHarfBuzzSharp.dll b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/libHarfBuzzSharp.dll new file mode 100644 index 0000000..6e91171 Binary files /dev/null and b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/libHarfBuzzSharp.dll differ diff --git a/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/libSkiaSharp.dll b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/libSkiaSharp.dll new file mode 100644 index 0000000..d00d746 Binary files /dev/null and b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/libSkiaSharp.dll differ diff --git a/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/publish.zip b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/publish.zip new file mode 100644 index 0000000..fcb76ac Binary files /dev/null and b/ToolsForm/ToolsForm/bin/Release/net8.0/win-x64/publish/publish.zip differ