package main import ( "context" "log" "net/http" "os" "os/signal" "syscall" "time" "git.jinshen.cn/remilia/push-server/interval/server/api" "git.jinshen.cn/remilia/push-server/interval/server/httpserver" "git.jinshen.cn/remilia/push-server/interval/server/ws" ) func main() { serverCtx, stop := signal.NotifyContext( context.Background(), os.Interrupt, syscall.SIGTERM, ) defer func() { stop() }() h := ws.NewHub() go h.Run(serverCtx) httpServer := httpserver.NewHTTPServer(":8080", api.NewRouter(h, serverCtx)) go func() { log.Println("Starting HTTP server on :8080") if err := httpServer.Start(); err != nil && err != http.ErrServerClosed { log.Fatalf("HTTP server error: %v", err) } }() <-serverCtx.Done() log.Println("Shutting down server...") shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), time.Second*10) defer shutdownCancel() if err := httpServer.Shutdown(shutdownCtx); err != nil { log.Printf("HTTP server shutdown error: %v", err) } }