diff --git a/modules/eventsource/manager.go b/modules/eventsource/manager.go index 7ed2a82903..3a347a4f7b 100644 --- a/modules/eventsource/manager.go +++ b/modules/eventsource/manager.go @@ -68,6 +68,19 @@ func (m *Manager) UnregisterAll() { m.messengers = map[int64]*Messenger{} } +// ConnectedUIDs returns a snapshot of all currently registered user IDs. +// Useful for fan-out broadcasters that need to filter recipients before +// calling SendMessage. +func (m *Manager) ConnectedUIDs() []int64 { + m.mutex.Lock() + defer m.mutex.Unlock() + uids := make([]int64, 0, len(m.messengers)) + for uid := range m.messengers { + uids = append(uids, uid) + } + return uids +} + // SendMessage sends a message to a particular user func (m *Manager) SendMessage(uid int64, message *Event) { m.mutex.Lock()