OliveGameStudio.Messenger 1.1.0

dotnet add package OliveGameStudio.Messenger --version 1.1.0
                    
NuGet\Install-Package OliveGameStudio.Messenger -Version 1.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OliveGameStudio.Messenger" Version="1.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OliveGameStudio.Messenger" Version="1.1.0" />
                    
Directory.Packages.props
<PackageReference Include="OliveGameStudio.Messenger" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OliveGameStudio.Messenger --version 1.1.0
                    
#r "nuget: OliveGameStudio.Messenger, 1.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OliveGameStudio.Messenger@1.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OliveGameStudio.Messenger&version=1.1.0
                    
Install as a Cake Addin
#tool nuget:?package=OliveGameStudio.Messenger&version=1.1.0
                    
Install as a Cake Tool

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 SubscriptionToken for 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

  1. Reference the library (package name OliveGameStudio.Messenger when published) or add the project directly:
    dotnet add package OliveGameStudio.Messenger
    # or
    dotnet add reference src/OliveGameStudio.Messenger.csproj
    
  2. 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 as Publish is called.
  • Delivery.EndOfFrame: handlers are queued; call PumpQueued() (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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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.

Version Downloads Last Updated
1.1.0 150 12/11/2025
1.0.0 302 11/25/2025