OliveGameStudio.Messenger
1.1.0
dotnet add package OliveGameStudio.Messenger --version 1.1.0
NuGet\Install-Package OliveGameStudio.Messenger -Version 1.1.0
<PackageReference Include="OliveGameStudio.Messenger" Version="1.1.0" />
<PackageVersion Include="OliveGameStudio.Messenger" Version="1.1.0" />
<PackageReference Include="OliveGameStudio.Messenger" />
paket add OliveGameStudio.Messenger --version 1.1.0
#r "nuget: OliveGameStudio.Messenger, 1.1.0"
#:package OliveGameStudio.Messenger@1.1.0
#addin nuget:?package=OliveGameStudio.Messenger&version=1.1.0
#tool nuget:?package=OliveGameStudio.Messenger&version=1.1.0
GameMessenger
Lightweight, strongly typed pub/sub messenger for game loops. GameMessenger lets systems talk without tight coupling and supports both immediate and queued (pumpable) delivery.
Features
- Strongly typed subscribe/publish API with
SubscriptionTokenfor safe unsubscription - Immediate delivery or queued delivery you process later with
PumpQueued - Handlers can unsubscribe themselves while messages are flowing (dispatch uses snapshots)
- Tiny surface area:
IGameMessenger,GameMessenger,Delivery,SubscriptionToken
Getting Started
- Reference the library (package name
OliveGameStudio.Messengerwhen published) or add the project directly:dotnet add package OliveGameStudio.Messenger # or dotnet add reference src/OliveGameStudio.Messenger.csproj - Create a messenger and subscribe:
using OliveGameStudio; var messenger = new GameMessenger(); var spawnedToken = messenger.Subscribe<PlayerSpawned>(msg => { Console.WriteLine($"Spawned {msg.Id} at {msg.Position}"); }); messenger.Publish(new PlayerSpawned("alpha", (0, 0))); // For queued subscriptions, call PumpQueued() each frame to flush the queue.
Delivery Modes
Delivery.Immediate: handlers fire as soon asPublishis called.Delivery.EndOfFrame: handlers are queued; callPumpQueued()(e.g., once per frame) to run them.
Example mixing both:
var messenger = new GameMessenger();
// Immediate handler
messenger.Subscribe<DamageTaken>(d => Console.WriteLine($"HP - {d.Amount}"), Delivery.Immediate);
// Queued handler (batch damage at end of frame)
messenger.Subscribe<DamageTaken>(d => pendingDamage += d.Amount, Delivery.EndOfFrame);
messenger.Publish(new DamageTaken(5));
// Later in the frame loop
messenger.PumpQueued();
Unsubscribing
Keep the SubscriptionToken to remove a handler later:
var token = messenger.Subscribe<InputEvent>(_ => HandleInput(), Delivery.Immediate);
// ... when no longer needed
messenger.Unsubscribe<InputEvent>(token);
Threading
GameMessenger is not thread-safe; interact with it from the same thread (typically your main game loop).
Building Locally
cd src
dotnet build OliveGameStudio.Messenger.csproj
License
Add your license information here.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on OliveGameStudio.Messenger:
| Package | Downloads |
|---|---|
|
OliveGameStudio.Starforge.MonoGame
MonoGame bindings for Starforge: windowing, rendering, content/texture loading, physics (Aether.Physics2D), input devices, and game context services. Targets .NET 10 for iOS (macOS Tahoe 26.1) and .NET 9 for other platforms. |
GitHub repositories
This package is not used by any popular GitHub repositories.