Complete rewrite
This commit is contained in:
55
src/irc/globals.go
Normal file
55
src/irc/globals.go
Normal file
@@ -0,0 +1,55 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user