diff --git a/main.go b/main.go index 5b6bb4c..e0f8fe0 100644 --- a/main.go +++ b/main.go @@ -20,8 +20,10 @@ import ( "net" "net/http" "os" + "os/signal" "strconv" "sync" + "syscall" "time" ) @@ -353,6 +355,9 @@ func getMatch(w http.ResponseWriter, r *http.Request) { /match/parse/ GET parses sharecode provided */ func main() { + killSignals := make(chan os.Signal, 1) + signal.Notify(killSignals, syscall.SIGINT, syscall.SIGTERM) + flag.Parse() confStr, err := os.ReadFile("config.yaml") @@ -369,7 +374,7 @@ func main() { Lock: new(sync.RWMutex), } - db.Client, err = ent.Open("sqlite3", "file:opencsgo.db?_fk=1&cache=shared") + db.Client, err = ent.Open("sqlite3", "file:csgowtfd.db?_fk=1&cache=shared") if err != nil { log.Panicf("Failed to open database %s: %v", "opencsgo.db", err) } @@ -407,21 +412,35 @@ func main() { router.HandleFunc("/match/{id:[0-9]{19}}", getMatch).Methods("GET") loggedRouter := handlers.LoggingHandler(os.Stdout, router) + sockets := make([]net.Listener, 0) + for _, l := range conf.Httpd.Listen { if l.Socket != "" { sL, err := net.Listen("unix", l.Socket) if err != nil { log.Fatalf("Failure listing on socket %s: %v", l.Socket, err) } - err = http.Serve(sL, loggedRouter) - if err != nil { - log.Fatalf("Failure serving on socket %s: %v", l.Socket, err) - } + sockets = append(sockets, sL) + go func() { + _ = http.Serve(sL, loggedRouter) + }() } else { - err = http.ListenAndServe(fmt.Sprintf("%s:%d", l.Host, l.Port), loggedRouter) + tL, err := net.Listen("tcp", fmt.Sprintf("%s:%d", l.Host, l.Port)) if err != nil { log.Fatalf("Failure listing on %s:%d: %v", l.Host, l.Port, err) } + go func() { + err = http.Serve(tL, loggedRouter) + if err != nil { + log.Fatalf("Failure serving on %s:%d: %v", l.Host, l.Port, err) + } + }() } } + + <-killSignals + + for _, s := range sockets { + _ = s.Close() + } }