### Summary
Refactors ScheduledEvent and EventScheduler API to use TimeOnly so recurrence offset is explicit.
API:
```cs
public ScheduledEvent(
DateTime startAfter,
DateTime endOn,
TimeOnly time,
IRecurrencePattern recurrence,
TimeZoneInfo timeZone = null
)
```
Example:
```cs
// Schedule a daily event at 8:00 AM UTC
EventScheduler.DailyAt(
new DateTime(2024, 6, 1, 8, 0, 0, DateTimeKind.Utc),
() => Console.WriteLine("Daily event triggered!")
);
// Schedule a custom recurring event at 3:30 PM UTC every Monday
var recurrence = new WeeklyRecurrencePattern(1, DaysOfWeek.Monday);
EventScheduler.Shared.ScheduleEvent(
DateTime.UtcNow,
new TimeOnly(15, 30),
() => Console.WriteLine("Weekly Monday event!"),
recurrence
);
```
29 lines
913 B
C#
29 lines
913 B
C#
using System;
|
|
|
|
namespace Server.Engines.Events;
|
|
|
|
public sealed class CallbackScheduledEvent : ScheduledEvent
|
|
{
|
|
private readonly Action _callback;
|
|
|
|
public CallbackScheduledEvent(
|
|
DateTime after,
|
|
TimeOnly time,
|
|
Action callback,
|
|
IRecurrencePattern recurrencePattern = null,
|
|
TimeZoneInfo timeZone = null
|
|
) : base(after, time, recurrencePattern, timeZone) =>
|
|
_callback = callback ?? throw new ArgumentNullException(nameof(callback));
|
|
|
|
public CallbackScheduledEvent(
|
|
DateTime after,
|
|
DateTime endOn,
|
|
TimeOnly time,
|
|
Action callback,
|
|
IRecurrencePattern recurrencePattern = null,
|
|
TimeZoneInfo timeZone = null
|
|
) : base(after, endOn, time, recurrencePattern, timeZone) =>
|
|
_callback = callback ?? throw new ArgumentNullException(nameof(callback));
|
|
|
|
public override void OnEvent() => _callback();
|
|
}
|