| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // Package global provides global variables and interfaces for accessing web and subscription servers.
- package global
- import (
- "context"
- "sync"
- _ "unsafe"
- "github.com/robfig/cron/v3"
- )
- var (
- webServer WebServer
- subServer SubServer
- restartHookMu sync.RWMutex
- restartHook func()
- )
- // WebServer interface defines methods for accessing the web server instance.
- type WebServer interface {
- GetCron() *cron.Cron // Get the cron scheduler
- GetCtx() context.Context // Get the server context
- GetWSHub() any // Get the WebSocket hub (using any to avoid circular dependency)
- }
- // SubServer interface defines methods for accessing the subscription server instance.
- type SubServer interface {
- GetCtx() context.Context // Get the server context
- }
- // SetWebServer sets the global web server instance.
- func SetWebServer(s WebServer) {
- webServer = s
- }
- // GetWebServer returns the global web server instance.
- func GetWebServer() WebServer {
- return webServer
- }
- // SetSubServer sets the global subscription server instance.
- func SetSubServer(s SubServer) {
- subServer = s
- }
- // GetSubServer returns the global subscription server instance.
- func GetSubServer() SubServer {
- return subServer
- }
- // SetRestartHook registers a callback that triggers an in-process panel
- // restart. main.go sets this up to push SIGHUP into its own signal channel
- // so the restart path works on Windows (where p.Signal(SIGHUP) is unsupported).
- func SetRestartHook(fn func()) {
- restartHookMu.Lock()
- defer restartHookMu.Unlock()
- restartHook = fn
- }
- // TriggerRestart fires the registered restart hook. Returns false if none is set.
- func TriggerRestart() bool {
- restartHookMu.RLock()
- fn := restartHook
- restartHookMu.RUnlock()
- if fn == nil {
- return false
- }
- fn()
- return true
- }
|