Skip to content

Commit a2cae37

Browse files
add function util-crontab-task_wait
1 parent 866cbd2 commit a2cae37

File tree

5 files changed

+74
-2
lines changed

5 files changed

+74
-2
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace BotSharp.Abstraction.Crontab.Models;
8+
9+
public class TaskWaitArgs
10+
{
11+
12+
[JsonPropertyName("delay_time")]
13+
public int DelayTime { get; set; }
14+
}

src/Infrastructure/BotSharp.Core.Crontab/BotSharp.Core.Crontab.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19+
<Content Include="data\agents\6745151e-6d46-4a02-8de4-1c4f21c7da95\functions\util-crontab-task_wait.json">
20+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
21+
</Content>
1922
<Content Include="data\agents\6745151e-6d46-4a02-8de4-1c4f21c7da95\functions\util-crontab-schedule_task.json">
2023
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2124
</Content>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using BotSharp.Core.Crontab.Hooks;
2+
using Microsoft.Extensions.Logging;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace BotSharp.Core.Crontab.Functions;
10+
11+
public class TaskWaitFn : IFunctionCallback
12+
{
13+
public string Name => $"{CrontabUtilityHook.PREFIX}task_wait";
14+
15+
private readonly ILogger<TaskWaitFn> _logger;
16+
public TaskWaitFn(ILogger<TaskWaitFn> logger)
17+
{
18+
_logger = logger;
19+
}
20+
public async Task<bool> Execute(RoleDialogModel message)
21+
{
22+
try
23+
{
24+
var args = JsonSerializer.Deserialize<TaskWaitArgs>(message.FunctionArgs);
25+
if (args != null || args.DelayTime > 0)
26+
{
27+
await Task.Delay(args.DelayTime * 1000);
28+
}
29+
message.Content = "wait task completed";
30+
}
31+
catch (Exception ex)
32+
{
33+
message.Content = "Unable to perform delay task";
34+
_logger.LogError(ex, "crontab wait task failed.");
35+
}
36+
return true;
37+
}
38+
}

src/Infrastructure/BotSharp.Core.Crontab/Hooks/CrontabUtilityHook.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@ public class CrontabUtilityHook : IAgentUtilityHook
77
{
88
public const string PREFIX = "util-crontab-";
99
private const string SCHEDULE_TASK_FN = $"{PREFIX}schedule_task";
10-
10+
private const string TASK_WAIT_FN = $"{PREFIX}task_wait";
11+
1112
public void AddUtilities(List<AgentUtility> utilities)
1213
{
1314
var items = new List<AgentUtility>
1415
{
1516
new AgentUtility
1617
{
1718
Name = UtilityName.ScheduleTask,
18-
Functions = [new(SCHEDULE_TASK_FN)],
19+
Functions = [new(SCHEDULE_TASK_FN), new(TASK_WAIT_FN)],
1920
Templates = [new($"{SCHEDULE_TASK_FN}.fn")]
2021
}
2122
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "util-crontab-task_wait",
3+
"description": "wait for a peroid of time then process",
4+
"parameters": {
5+
"type": "object",
6+
"properties": {
7+
"delay_time": {
8+
"type": "number",
9+
"description": "delay time in seconds"
10+
}
11+
},
12+
"required": [
13+
"delay_time"
14+
]
15+
}
16+
}

0 commit comments

Comments
 (0)