56 lines
1003 B
Go
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
|
|
}
|