Complete rewrite

This commit is contained in:
2025-10-01 21:24:29 -07:00
parent 5b29c26102
commit 5b0b6a48a9
18 changed files with 371 additions and 374 deletions

55
src/irc/globals.go Normal file
View 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
}