nsfwapp/backend/server.go
2026-03-14 14:28:33 +01:00

85 lines
1.6 KiB
Go

// backend\server.go
package main
import (
"context"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
// --- main ---
func main() {
loadSettings()
fixKeepRootFilesIntoModelSubdirs()
postWorkQ.StartWorkers(1)
startPostWorkStatusRefresher()
go startGeneratedGarbageCollector()
// ✅ NSFW-ONNX Detector initialisieren
if err := initNSFWDetector(); err != nil {
fmt.Println("❌ NSFW-ONNX Fehler:", err)
os.Exit(1)
}
defer func() {
_ = closeNSFWDetector()
}()
mux := http.NewServeMux()
auth, err := NewAuthManager()
if err != nil {
fmt.Println("❌ auth init:", err)
_ = closeNSFWDetector()
os.Exit(1)
}
store := registerRoutes(mux, auth)
go startChaturbateOnlinePoller(store)
go startChaturbateAutoStartWorker(store)
go startMyFreeCamsAutoStartWorker(store)
go startDiskSpaceGuard()
if _, err := ensureCoversDir(); err != nil {
fmt.Println("⚠️ covers dir:", err)
}
fmt.Println("🌐 HTTP-API aktiv: http://localhost:9999")
handler := withCORS(mux)
srv := &http.Server{
Addr: ":9999",
Handler: handler,
}
// Shutdown-Signale
stopSig := make(chan os.Signal, 1)
signal.Notify(stopSig, os.Interrupt, syscall.SIGTERM)
go func() {
<-stopSig
fmt.Println("🛑 Beende Server...")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
_ = srv.Shutdown(ctx)
_ = closeNSFWDetector()
}()
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
fmt.Println("❌ HTTP-Server Fehler:", err)
_ = closeNSFWDetector()
os.Exit(1)
}
_ = closeNSFWDetector()
}