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