Files
minimal-irc-server/src/irc/globals.go
2025-10-01 21:24:29 -07:00

56 lines
1003 B
Go

package irc
import (
"git.chromaticdragon.app/pyrex/minimal-irc-server/v2/src/transport"
)
type Globals struct {
Server *transport.Server
Users *UsersSystem
Notifications *NotificationsSystem
}
var globals *Globals = nil
func InitializeGlobals(server *transport.Server) {
globals = &Globals{
Server: server,
Users: NewUsersSystem(),
Notifications: NewNotificationsSystem(),
}
}
func GetGlobals() *Globals {
if globals == nil {
panic("globals not initialized")
}
return globals
}
func (g *Globals) getHandlers() []Handler {
return []Handler{
g.Users,
g.Notifications,
}
}
func Dispatch[T any](askPermission func(T) error, act func(T)) error {
globals := GetGlobals()
handlers := globals.getHandlers()
for _, handler := range handlers {
if h, ok := handler.(T); ok {
err := askPermission(h)
if err != nil {
return err
}
}
}
for _, handler := range handlers {
if h, ok := handler.(T); ok {
act(h)
}
}
return nil
}