Files
push-server/cmd/server/main.go

48 lines
970 B
Go

package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"git.jinshen.cn/remilia/push-server/interval/api"
"git.jinshen.cn/remilia/push-server/interval/hub"
"git.jinshen.cn/remilia/push-server/interval/server"
)
func main() {
serverCtx, serverCancel := context.WithCancel(context.Background())
defer func() {
serverCancel()
}()
h := hub.NewHub()
go h.Run(serverCtx)
httpServer := server.NewHTTPServer(":8080", api.NewRouter(h))
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)
}
}()
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
<-sig
log.Println("Shutting down server...")
serverCancel()
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), time.Second*10)
defer shutdownCancel()
httpServer.Shutdown(shutdownCtx)
}