Search Apps Documentation Source Content File Folder Download Copy Actions Download

broker_filetest.gno

1.38 Kb ยท 75 lines
 1package main
 2
 3import (
 4	"gno.land/p/jeronimo000/message"
 5)
 6
 7func main() {
 8	// Create a message broker and a generic message callback
 9	broker := message.NewBroker()
10	cb := func(m message.Message) {
11		println("topic triggered: " + string(m.Topic))
12		println("topic data: " + m.Data.(string))
13	}
14
15	// Subscribe to a couple of events
16	_, err := broker.Subscribe("eventA", cb)
17	if err != nil {
18		panic(err)
19	}
20
21	_, err = broker.Subscribe("eventB", cb)
22	if err != nil {
23		panic(err)
24	}
25
26	// Subscribe to an event and then unsubscribe from it
27	id, err := broker.Subscribe("eventC", cb)
28	if err != nil {
29		panic(err)
30	}
31
32	_, err = broker.Unsubscribe("eventC", id)
33	if err != nil {
34		panic(err)
35	}
36
37	// Subscribe to all events
38	_, err = broker.Subscribe(message.TopicAll, func(m message.Message) {
39		println("catchall topic triggered: " + string(m.Topic))
40	})
41	if err != nil {
42		panic(err)
43	}
44
45	// List broker topics
46	println("topics:")
47	for _, topic := range broker.Topics() {
48		println("- " + string(topic))
49	}
50
51	// Publish events
52	println()
53	if err = broker.Publish("eventA", "A"); err != nil {
54		panic(err)
55	}
56
57	println()
58	if err = broker.Publish("eventB", "B"); err != nil {
59		panic(err)
60	}
61}
62
63// Output:
64// topics:
65// - eventA
66// - eventB
67// - eventC
68//
69// topic triggered: eventA
70// topic data: A
71// catchall topic triggered: eventA
72//
73// topic triggered: eventB
74// topic data: B
75// catchall topic triggered: eventB