A lightweight, high-performance event and signal management library for .NET applications, part of the AbyssIrc ecosystem.
$ dotnet add package AbyssIrc.SignalsA lightweight, high-performance event and signal management library for .NET applications.
Install the package via NuGet:
dotnet add package AbyssIrc.Signals
// Create a signal service
var signalConfig = new AbyssIrcSignalConfig
{
DispatchTasks = Environment.ProcessorCount
};
var signalService = new AbyssSignalService(signalConfig);
// Define an event
public record UserConnectedEvent(string Username);
// Create a listener
public class UserConnectionListener : IAbyssSignalListener<UserConnectedEvent>
{
public async Task OnEventAsync(UserConnectedEvent signalEvent)
{
Console.WriteLine($"User connected: {signalEvent.Username}");
}
}
// Subscribe to an event
signalService.Subscribe<UserConnectedEvent>(new UserConnectionListener());
// Or use a lambda
signalService.Subscribe<UserConnectedEvent>(async evt =>
{
Console.WriteLine($"User connected: {evt.Username}");
});
// Publish an event
await signalService.PublishAsync(new UserConnectedEvent("JohnDoe"));
The central component for event management. Key methods include:
Subscribe<TEvent>(): Register event listenersPublishAsync<TEvent>(): Dispatch events to all registered listenersAllEventsObservable: Observable stream of all eventsConfigure the signal service:
var config = new AbyssIrcSignalConfig
{
// Number of parallel dispatch tasks
DispatchTasks = 5
};
// Multiple listeners can handle the same event
signalService.Subscribe<UserConnectedEvent>(listener1);
signalService.Subscribe<UserConnectedEvent>(listener2);
The signal service handles listener exceptions, logging them without stopping event dispatching.
System.Reactive for efficient event handlingIAbyssSignalListener<TEvent> for custom listenersThis project is licensed under the MIT License. See the LICENSE file for details.
AbyssIrc.Signals is part of the AbyssIrc ecosystem, a modern, extensible IRC server and networking library.
Note: This library is currently in active development. APIs may change between versions.