You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.0 KiB
51 lines
1.0 KiB
package server |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"log" |
|
"net/http" |
|
"os" |
|
"os/signal" |
|
"systemdesigngame/internal/auth" |
|
"systemdesigngame/internal/level" |
|
"time" |
|
|
|
"github.com/joho/godotenv" |
|
) |
|
|
|
func InitApp() { |
|
if err := godotenv.Load(); err != nil { |
|
log.Fatal("failed to load .env") |
|
} |
|
|
|
auth.JwtSecret = []byte(os.Getenv("JWT_SECRET")) |
|
|
|
levels, err := level.LoadLevels("data/levels.json") |
|
if err != nil { |
|
log.Fatal("failed to load levels: " + err.Error()) |
|
} |
|
level.InitRegistry(levels) |
|
} |
|
|
|
func GracefulShutdown(srv *http.Server) { |
|
// setup graceful shutdown |
|
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) |
|
defer stop() |
|
|
|
// start http server in a separate goroutine |
|
go func() { |
|
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { |
|
fmt.Println("Server failed: " + err.Error()) |
|
} |
|
}() |
|
|
|
// wait for shutdown signal |
|
<-ctx.Done() |
|
stop() |
|
|
|
shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) |
|
defer cancel() |
|
|
|
srv.Shutdown(shutdownCtx) |
|
}
|
|
|