// Publish events to subscribers func (mgr *Manager) Publish(e events.Event) { // TODO: this will not block, but might still want to consider // a timeout for the callback go func() { // subscribers for this event mgr.subs.mu.RLock() subs := mgr.subs.subscribers[e.Topic()] mgr.subs.mu.RUnlock() log.Debugf("Found %d subscribers to %s: %s", len(subs), e.Topic(), e.Message()) for sub, f := range subs { log.Debugf("Event manager calling back to %s", sub) f(e) } }() }