mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-25 10:05:49 +08:00
作为外部入参 CancellationToken
This commit is contained in:
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BetterGenshinImpact.GameTask.AutoGeniusInvokation.Exception;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
@@ -22,6 +23,11 @@ public abstract class BaseGearTask : ObservableObject
|
||||
/// 任务名称
|
||||
/// </summary>
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 任务类型
|
||||
/// </summary>
|
||||
public string Type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 任务的文件位置,如果有
|
||||
@@ -36,6 +42,7 @@ public abstract class BaseGearTask : ObservableObject
|
||||
/// <summary>
|
||||
/// 父节点
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public BaseGearTask? Father { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@@ -46,14 +53,14 @@ public abstract class BaseGearTask : ObservableObject
|
||||
/// <summary>
|
||||
/// 执行任务
|
||||
/// </summary>
|
||||
public async Task Execute()
|
||||
public async Task Execute(CancellationToken ct)
|
||||
{
|
||||
var stopwatch = new Stopwatch();
|
||||
try
|
||||
{
|
||||
_logger.LogInformation("------------------------------");
|
||||
stopwatch.Start();
|
||||
await Run();
|
||||
await Run(ct);
|
||||
}
|
||||
catch (NormalEndException e)
|
||||
{
|
||||
@@ -82,7 +89,7 @@ public abstract class BaseGearTask : ObservableObject
|
||||
/// <summary>
|
||||
/// 执行任务
|
||||
/// </summary>
|
||||
public abstract Task Run();
|
||||
public abstract Task Run(CancellationToken ct);
|
||||
|
||||
|
||||
public static BaseGearTask ReadFileToBaseGearTasks(string? path)
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BetterGenshinImpact.Model.Gear.Parameter;
|
||||
using Microsoft.Extensions.Logging;
|
||||
@@ -25,7 +26,7 @@ public class CSharpReflectionGearTask : BaseGearTask
|
||||
_params = paramsObj;
|
||||
}
|
||||
|
||||
public override async Task Run()
|
||||
public override async Task Run(CancellationToken ct)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(_params.MethodPath))
|
||||
{
|
||||
@@ -65,7 +66,7 @@ public class CSharpReflectionGearTask : BaseGearTask
|
||||
_logger.LogInformation("准备执行反射调用: {MethodPath}, 参数数量: {ParamCount}", methodPath, parameters.Length);
|
||||
|
||||
// 解析类型和方法名
|
||||
Type targetType;
|
||||
Type? targetType;
|
||||
string methodName;
|
||||
|
||||
if (methodPath.Contains(':'))
|
||||
@@ -88,7 +89,7 @@ public class CSharpReflectionGearTask : BaseGearTask
|
||||
var className = string.Join(".", parts2.Take(parts2.Length - 1));
|
||||
|
||||
// 在当前程序集和已加载的程序集中查找类型
|
||||
targetType = Type.GetType(className) ??
|
||||
targetType = System.Type.GetType(className) ??
|
||||
AppDomain.CurrentDomain.GetAssemblies()
|
||||
.SelectMany(a => a.GetTypes())
|
||||
.FirstOrDefault(t => t.FullName == className || t.Name == className);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BetterGenshinImpact.Core.Config;
|
||||
using BetterGenshinImpact.Core.Script;
|
||||
@@ -20,7 +21,7 @@ public class JavascriptGearTask : BaseGearTask
|
||||
|
||||
public string FolderName { get; set; }
|
||||
|
||||
private JavascriptGearTaskParams _params;
|
||||
private readonly JavascriptGearTaskParams _params;
|
||||
|
||||
public JavascriptGearTask(JavascriptGearTaskParams paramsObj)
|
||||
{
|
||||
@@ -46,9 +47,9 @@ public class JavascriptGearTask : BaseGearTask
|
||||
FilePath = Path.Combine(Global.ScriptPath(), _params.FolderName);
|
||||
}
|
||||
|
||||
public override async Task Run()
|
||||
public override async Task Run(CancellationToken ct)
|
||||
{
|
||||
await ExecuteScriptAsync(_params.Context, _params.PathingPartyConfig);
|
||||
await ExecuteScriptAsync(ct, _params.Context, _params.PathingPartyConfig);
|
||||
}
|
||||
|
||||
// public override string ReadDetail()
|
||||
@@ -56,7 +57,7 @@ public class JavascriptGearTask : BaseGearTask
|
||||
// throw new NotImplementedException();
|
||||
// }
|
||||
|
||||
private async Task ExecuteScriptAsync(dynamic? context = null, PathingPartyConfig? partyConfig = null)
|
||||
private async Task ExecuteScriptAsync(CancellationToken ct, dynamic? context = null, PathingPartyConfig? partyConfig = null)
|
||||
{
|
||||
// 默认值
|
||||
GlobalMethod.SetGameMetrics(1920, 1080);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BetterGenshinImpact.Core.Recorder;
|
||||
using BetterGenshinImpact.Core.Script;
|
||||
@@ -12,10 +13,10 @@ public class KeyMouseGearTask : BaseGearTask
|
||||
FilePath = path;
|
||||
}
|
||||
|
||||
public override async Task Run()
|
||||
public override async Task Run(CancellationToken ct)
|
||||
{
|
||||
// 加载并执行
|
||||
var json = await File.ReadAllTextAsync(FilePath);
|
||||
await KeyMouseMacroPlayer.PlayMacro(json, CancellationContext.Instance.Cts.Token, false);
|
||||
var json = await File.ReadAllTextAsync(FilePath, ct);
|
||||
await KeyMouseMacroPlayer.PlayMacro(json, ct, false);
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BetterGenshinImpact.Core.Script;
|
||||
using BetterGenshinImpact.GameTask;
|
||||
@@ -18,7 +19,7 @@ public class PathingGearTask : BaseGearTask
|
||||
_params = param;
|
||||
}
|
||||
|
||||
public override async Task Run()
|
||||
public override async Task Run(CancellationToken ct)
|
||||
{
|
||||
// 加载并执行
|
||||
var task = PathingTask.BuildFromFilePath(_params.Path);
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BetterGenshinImpact.Core.Config;
|
||||
using BetterGenshinImpact.Core.Script;
|
||||
using BetterGenshinImpact.GameTask.Shell;
|
||||
|
||||
namespace BetterGenshinImpact.Model.Gear.Tasks;
|
||||
|
||||
public class ShellGearTask(ShellConfig? shellConfig) : BaseGearTask
|
||||
{
|
||||
public override async Task Run()
|
||||
public override async Task Run(CancellationToken ct)
|
||||
{
|
||||
var task = new ShellTask(ShellTaskParam.BuildFromConfig(Name, shellConfig ?? new ShellConfig()));
|
||||
await task.Start(CancellationContext.Instance.Cts.Token);
|
||||
await task.Start(ct);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BetterGenshinImpact.Model.Gear.Tasks;
|
||||
|
||||
@@ -15,7 +16,7 @@ public class SequentialGearTrigger : GearBaseTrigger
|
||||
List<BaseGearTask> list = GearTaskRefenceList.Select(gearTask => gearTask.ToGearTask()).ToList();
|
||||
foreach (var gearTask in list)
|
||||
{
|
||||
await gearTask.Run();
|
||||
await gearTask.Run(CancellationToken.None);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user