in bus/bus.go [90:121]
func (b *bus) Publish(e Event) {
b.RLock()
defer b.RUnlock()
b.log.Debugf("%+v", e)
if len(b.listeners) == 0 && b.store != nil {
b.store <- e
return
}
if b.store != nil && len(b.store) != 0 {
doBreak := false
for !doBreak {
select {
case eve := <-b.store:
for _, listener := range b.listeners {
if listener.interested(eve) {
listener.channel <- eve
}
}
default:
doBreak = true
}
}
}
for _, listener := range b.listeners {
if listener.interested(e) {
listener.channel <- e
}
}
}