This repository has been archived by the owner on May 2, 2023. It is now read-only.
/
doc.go
66 lines (52 loc) · 1.73 KB
/
doc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
Package `bus` is a plain event bus for Go, allowing otherwise decoupled
components to publish and listen for events.
A simple publish onto the default bus:
bus.SubscribeFunc("greetings", func(b *Bus, topic, value interface{}) {
log.Printf("Received greeting: %v", value)
})
bus.Publish("greetings", "Good morning Mr Freeman")
Using a custom bus and deregistering a subscriber after use:
b := bus.NewBus()
// Log all kills and deaths to console
eventLogger := func(b *Bus, t, v interface{}) {
switch ev := v.(type) {
case Kill:
log.Printf("You killed %s", ev.Victim)
case Join:
log.Printf("%s joined", ev.Player)
}
}
b.SubscribeFunc("kills", eventLogger)
b.SubscribeFunc("joins", eventLogger)
// Set player flag when Breen is killed
dereg := b.SubscribeFunc("kills", func(b *Bus, t, v interface{}) {
kill := v.(Kill)
if kill.Victim == "Breen" {
flags.KilledBreen = true
dereg() // stop listening for events
}
})
// Publish events
b.Publish("kills", Kill{Victim: "Vortigaunt"})
b.Publish("kills", Kill{Victim: "Breen"})
Sending events asynchronously using a non-blocking `Publish` call via the `Async` flag:
// Listen for releases, and start download immediately
bus.SubscribeFunc("release", func(b *Bus, t, v interface{}) {
if err := download(v); err != nil {
log.Printf("download failed: %v", err)
}
log.Printf("%v download complete!", v)
})
// Book holiday for certain releases.
bus.SubscribeFunc("games", func(b *Bus, t, v interface{}) {
if v == "hl3" {
bookHoliday(5 * 24 * time.Hour)
}
})
for releases := range releaseChan {
// Call asynchronously as handlers may take some time...
bus.Publish("games", release, Async)
}
*/
package bus // import "github.com/johnsto/go-bus"