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