pub trait Message:
Send
+ Sync
+ 'static { }
Expand description
A buffered message for pull-based event handling.
Messages can be written with MessageWriter
and read using the MessageReader
system parameter.
Messages are stored in the Messages<M>
resource, and require periodically polling the world for new messages,
typically in a system that runs as part of a schedule.
While the polling imposes a small overhead, messages are useful for efficiently batch processing
a large number of messages at once. For cases like these, messages can be more efficient than Event
s (which are handled via Observer
s).
Unlike Event
s triggered for observers, messages are evaluated at fixed points in the schedule
rather than immediately when they are sent. This allows for more predictable scheduling, and deferring
message processing to a later point in time.
Messages must be thread-safe.
§Usage
The Message
trait can be derived:
#[derive(Message)]
struct Greeting(String);
The message can then be written to the message buffer using a MessageWriter
:
fn write_hello(mut writer: MessageWriter<Greeting>) {
writer.write(Greeting("Hello!".to_string()));
}
Messages can be efficiently read using a MessageReader
:
fn read_messages(mut reader: MessageReader<Greeting>) {
// Process all messages of type `Greeting`.
for Greeting(greeting) in reader.read() {
println!("{greeting}");
}
}