1
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
using Evergreen.Health.Application.Health.Devices.Contracts;
|
||||
using Evergreen.Health.Application.Health.Integrations.HomeAssistant;
|
||||
|
||||
namespace Evergreen.Health.Application.Health.Scenes;
|
||||
|
||||
public sealed class DeviceSceneContext
|
||||
{
|
||||
public IReadOnlyDictionary<string, HomeAssistantState> States { get; }
|
||||
public List<HomeAssistantActionResult> Results { get; }
|
||||
public DeviceActionRunner Runner { get; }
|
||||
public DeviceSceneContext(DeviceActionRunner runner, IReadOnlyDictionary<string, HomeAssistantState> states,
|
||||
List<HomeAssistantActionResult> results) => (Runner, States, Results) = (runner, states, results);
|
||||
|
||||
public Task RunAsync(DeviceCommand command, CancellationToken cancellationToken)
|
||||
=> Runner.RunAsync(States, Results, command, cancellationToken);
|
||||
|
||||
public async Task ExternalAsync(string name, string entityId, Func<CancellationToken, Task> operation,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
var result = new HomeAssistantActionResult { Name = name, EntityId = entityId };
|
||||
Results.Add(result);
|
||||
try
|
||||
{
|
||||
await operation(cancellationToken);
|
||||
result.Status = string.IsNullOrWhiteSpace(entityId) ? "Completed" : "Succeeded";
|
||||
result.Message = string.IsNullOrWhiteSpace(entityId) ? "内部任务已处理" : "控制指令已发送";
|
||||
}
|
||||
catch (Exception exception) when (exception is not OperationCanceledException)
|
||||
{
|
||||
result.Status = "Failed"; result.Message = exception.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user