Add example of propagating a structure

pull/13604/head
Mihai Galos 2022-02-25 22:22:56 +01:00
parent aa3ac6f27a
commit 58c333f509
2 changed files with 14 additions and 9 deletions

View File

@ -12,17 +12,22 @@ fn main() {
r := Receiver{}
sub.subscribe_method('event_foo', on_foo, r)
sub.subscribe('event_bar', on_bar)
sub.subscribe('event_baz', on_baz)
println("Receiver ok: "+r.ok.str())
some_module.do_work()
println("Receiver ok: "+r.ok.str())
}
fn on_foo(mut receiver &Receiver, e &some_module.Event, sender voidptr) {
fn on_foo(mut receiver &Receiver, e &some_module.EventMetadata, sender voidptr) {
receiver.ok = true
println('on_foo :: ' +e.message)
}
fn on_bar(receiver voidptr, e &some_module.Event, sender voidptr) {
fn on_bar(receiver voidptr, e &some_module.EventMetadata, sender voidptr) {
println('on_bar :: ' +e.message)
}
fn on_baz(receiver voidptr, event voidptr, d &some_module.Duration) {
println('on_baz :: ' + d.hours.str())
}

View File

@ -6,27 +6,27 @@ const (
eb = eventbus.new()
)
pub struct Work {
pub struct Duration {
pub:
hours int
}
pub struct Event {
pub struct EventMetadata {
pub:
message string
}
pub fn do_work() {
work := Work{10}
duration := Duration{10}
for i in 0 .. 10 {
println('working...')
if i == 5 {
error := &Event{'Iteration '+i.str()}
some_module.eb.publish('event_foo', work, error)
some_module.eb.publish('event_bar', work, error)
event_metadata := &EventMetadata{'Iteration '+i.str()}
some_module.eb.publish('event_foo', duration, event_metadata)
some_module.eb.publish('event_bar', duration, event_metadata)
}
}
some_module.eb.publish('event_bar', &Work{42}, &Event{'Additional data at the end.'})
some_module.eb.publish('event_baz', &Duration{42}, &EventMetadata{'Additional data at the end.'})
}
pub fn get_subscriber() eventbus.Subscriber {