Using Device Messenger
FOperatingSystemDeviceMessengerSystem (accessed via Find Messenger from Operating System / Find Messenger for Device) scopes events to a single running device. Use it when Mail, Video Player, portable battery handlers, or your own programs need to talk inside the OS without reaching level actors.
Full reference: Device Messenger Subsystem.
flowchart TB
subgraph row1[" "]
direction LR
Mail["BP_Prog_Mail"] -->|Broadcast MailReceived| DM["FOperatingSystemDeviceMessengerSystem"]
end
subgraph row2[" "]
direction LR
Taskbar["UOperatingSystemTaskbarButton"] --- Battery["Portable device battery HUD"]
end
DM --> Taskbar
DM --> Battery
When to use which messenger
Section titled “When to use which messenger”| Device Messenger | Global Messenger | |
|---|---|---|
| Scope | One device / OS instance | Entire world |
| Identifiers | FName event names | Gameplay tags |
| Typical use | Program ↔ program, battery UI | Terminal → door, OS → gameplay |
Blueprint — notify when mail arrives
Section titled “Blueprint — notify when mail arrives”Mail program broadcasts
Section titled “Mail program broadcasts”(On new mail received) → Find Messenger from Operating System → Broadcast (Event Name: "MailReceived", Payload: mail data object)Taskbar widget listens
Section titled “Taskbar widget listens”Event Construct → Find Messenger for Device → Begin Listening (Event Name: "MailReceived") Callback → Show unread badge on taskbar button
C++ broadcast
Section titled “C++ broadcast”#include "Devices/OperatingSystemDeviceMessenger.h"#include "Statics/OperatingSystemStatics.h"
void UMyMailProgram::NotifyNewMail(){ if (auto* Messenger = UOperatingSystemStatics::FindMessengerFromOperatingSystem(GetOperatingSystem())) { Messenger->Broadcast(FName("MailReceived"), this); }}C++ listen
Section titled “C++ listen”UFUNCTION()void UMyTaskbarWidget::OnMailReceived(UObject* Payload);
void UMyTaskbarWidget::NativeConstruct(){ Super::NativeConstruct(); if (auto* Messenger = UOperatingSystemStatics::FindMessengerFromOperatingSystem(OS)) { FOperatingSystemDeviceMessageDelegate Delegate; Delegate.BindDynamic(this, &UMyTaskbarWidget::OnMailReceived); Messenger->BeginListening(FName("MailReceived"), Delegate); }}Bundled examples
Section titled “Bundled examples”Study plugin implementations: