45 lines
1.7 KiB
C#
45 lines
1.7 KiB
C#
using System.Threading.Tasks;
|
|
using System.Threading;
|
|
|
|
namespace io.github.hatayama.uLoopMCP
|
|
{
|
|
/// <summary>
|
|
/// Debug tool that sleeps for specified duration to test timeout functionality
|
|
/// Related classes:
|
|
/// - SleepSchema: Input parameters including sleep duration and timeout
|
|
/// - SleepResponse: Output containing results and timing information
|
|
/// - AbstractUnityTool: Base class providing timeout infrastructure
|
|
/// </summary>
|
|
[McpTool(
|
|
DisplayDevelopmentOnly = true,
|
|
Description = "Debug tool that sleeps for specified duration to test timeout functionality"
|
|
)]
|
|
public class SleepTool : AbstractUnityTool<SleepSchema, SleepResponse>
|
|
{
|
|
public override string ToolName => "debug-sleep";
|
|
|
|
protected override async Task<SleepResponse> ExecuteAsync(SleepSchema parameters, CancellationToken cancellationToken)
|
|
{
|
|
int actualSleepSeconds = 0;
|
|
|
|
// Sleep 1 second at a time, checking for cancellation between each sleep
|
|
for (int i = 0; i < parameters.SleepSeconds; i++)
|
|
{
|
|
// Check for cancellation before each sleep iteration
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
|
|
// Sleep for 1 second with cancellation support
|
|
await Task.Delay(1000, cancellationToken);
|
|
|
|
actualSleepSeconds = i + 1;
|
|
}
|
|
|
|
return new SleepResponse
|
|
{
|
|
Message = $"Successfully slept for {actualSleepSeconds} seconds",
|
|
ActualSleepSeconds = actualSleepSeconds,
|
|
WasCancelled = false
|
|
};
|
|
}
|
|
}
|
|
} |