Skip to content

Messaging

Apq.ChangeBubbling provides a powerful messaging system with weak reference subscriptions, multiple scheduling environments, and performance monitoring.

ChangeMessenger

ChangeMessenger is the core class of the messaging system.

Basic Configuration

csharp
using Apq.ChangeBubbling.Messaging;

ChangeMessenger.EnableWeakMessenger = true;
ChangeMessenger.EnableRxStream = true;
ChangeMessenger.EnableMetrics = true;
ChangeMessenger.UseSynchronousPublish = true;

Scheduling Environments

Dispatcher Scheduler

csharp
ChangeMessenger.RegisterDispatcher("ui");
ChangeMessenger.Publish(change, "ui");

ThreadPool Scheduler

csharp
ChangeMessenger.RegisterThreadPool("background");
ChangeMessenger.Publish(change, "background");

Dedicated Thread Scheduler

csharp
ChangeMessenger.RegisterDedicatedThread("worker", "WorkerThread");
ChangeMessenger.Publish(change, "worker");

Publishing Messages

csharp
ChangeMessenger.PublishToDefaultEnv(change);
ChangeMessenger.PublishToNamedEnv(change, "ui");
ChangeMessenger.Publish(change, "ui");

Subscribing to Messages

Using Rx Streams

csharp
using System.Reactive.Linq;

ChangeMessenger.AsObservable()
    .Subscribe(change => Console.WriteLine(change));

ChangeMessenger.AsObservable("ui")
    .Subscribe(change => UpdateUI(change));

ChangeMessenger.AsThrottledObservable(TimeSpan.FromMilliseconds(100))
    .Subscribe(change => HandleThrottled(change));

Event Filtering

csharp
using Apq.ChangeBubbling.Infrastructure.EventFiltering;

ChangeMessenger.RegisterFilter("myFilter", new PropertyNameFilter("Name", "Age"));
ChangeMessenger.RemoveFilter("myFilter");

Performance Monitoring

csharp
ChangeMessenger.EnableMetrics = true;

var metrics = ChangeMessenger.GetPerformanceMetrics();
Console.WriteLine($"Total Events: {metrics.TotalEvents}");
Console.WriteLine($"Events/Second: {metrics.EventsPerSecond}");

var stats = ChangeMessenger.GetEventTypeStatistics();
foreach (var (type, count) in stats)
{
    Console.WriteLine($"{type}: {count}");
}

Released under the MIT License