Complete rewrite
This commit is contained in:
46
src/irc/broadcast.go
Normal file
46
src/irc/broadcast.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package irc
|
||||
|
||||
import (
|
||||
"git.chromaticdragon.app/pyrex/minimal-irc-server/v2/src/transport"
|
||||
)
|
||||
|
||||
type BroadcastGroup struct {
|
||||
channels []canonicalChannelName
|
||||
users []*User
|
||||
specificallyExcludedUsers []*User
|
||||
}
|
||||
|
||||
func NewBroadcastGroup() *BroadcastGroup {
|
||||
return &BroadcastGroup{}
|
||||
}
|
||||
|
||||
func (bcg *BroadcastGroup) AddChannels(names ...canonicalChannelName) {
|
||||
bcg.channels = append(bcg.channels, names...)
|
||||
}
|
||||
|
||||
func (bcg *BroadcastGroup) AddUsers(users ...*User) {
|
||||
bcg.users = append(bcg.users, users...)
|
||||
}
|
||||
|
||||
func (bcg *BroadcastGroup) AddSpecificallyExcludedUsers(users ...*User) {
|
||||
bcg.specificallyExcludedUsers = append(bcg.users, users...)
|
||||
}
|
||||
|
||||
func Broadcast(bcg *BroadcastGroup, content transport.Content) {
|
||||
g := GetGlobals()
|
||||
allUsers := make(map[*User]struct{})
|
||||
for _, c := range bcg.channels {
|
||||
for u := range g.Users.ByCanonicalChannel(c) {
|
||||
allUsers[u] = struct{}{}
|
||||
}
|
||||
}
|
||||
for _, u := range bcg.users {
|
||||
allUsers[u] = struct{}{}
|
||||
}
|
||||
for _, u := range bcg.specificallyExcludedUsers {
|
||||
delete(allUsers, u)
|
||||
}
|
||||
for u := range allUsers {
|
||||
g.Server.SendMessage(u.clientId, content)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user