### Summary
* Adds an event scheduler.
* Adds conveniences for hourly, daily, weekly, biweekly, monthly, ordinal monthly, and yearly recurrences
Example:
```cs
var tz = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
// Specify the time of the day, and the day of the week you want it to occur. Make sure it is translated into Utc.
// The next occurrence will be _after_ the specified date/time.
var scheduledEvent = EventScheduler.WeeklyAt(new DateTime(2025, 04, 26, 17, 00, 00), StartEvent, tz);
void StartEvent()
{
World.Broadcast(0x30, false, "The event has started!");
}
Console.WriteLine("Event starts on {0}", scheduledEvent.NextOccurrence);
```
In this example, on _Saturday, May 3rd, 2025 @ 5pm ET_, the message "The event has started!" will be broadcasted.
28 lines
872 B
C#
28 lines
872 B
C#
using System;
|
|
|
|
namespace Server.Engines.Events;
|
|
|
|
public sealed class CallbackScheduledEvent : ScheduledEvent
|
|
{
|
|
private readonly Action _callback;
|
|
|
|
public CallbackScheduledEvent(
|
|
DateTime afterUtc,
|
|
Action callback,
|
|
IRecurrencePattern recurrencePattern = null,
|
|
TimeZoneInfo timeZone = null
|
|
) : base(afterUtc, recurrencePattern, timeZone) =>
|
|
_callback = callback ?? throw new ArgumentNullException(nameof(callback));
|
|
|
|
public CallbackScheduledEvent(
|
|
DateTime afterUtc,
|
|
DateTime endDate,
|
|
Action callback,
|
|
IRecurrencePattern recurrencePattern = null,
|
|
TimeZoneInfo timeZone = null
|
|
) : base(afterUtc, endDate, recurrencePattern, timeZone) =>
|
|
_callback = callback ?? throw new ArgumentNullException(nameof(callback));
|
|
|
|
|
|
public override void OnEvent() => _callback();
|
|
}
|