86 lines
1.4 KiB
Go
86 lines
1.4 KiB
Go
//go:generate go run gen/gen.go
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"regexp"
|
|
"slices"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/logger"
|
|
"github.com/gookit/color"
|
|
"github.com/joho/godotenv"
|
|
|
|
"bdgrp_go/db"
|
|
"bdgrp_go/routes"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
const PORT = ":8482"
|
|
|
|
var servers = []string{"TW", "JP", "GL", "CN"}
|
|
|
|
func main() {
|
|
if _, err := os.Stat(".env"); os.IsNotExist(err) {
|
|
log.Fatal("Error: .env not found.")
|
|
}
|
|
godotenv.Load()
|
|
|
|
server := os.Getenv("SERVER")
|
|
valid := slices.Contains(servers, server)
|
|
if !valid {
|
|
log.Fatal("Error: Unknown Server.")
|
|
}
|
|
|
|
for _, s := range servers {
|
|
os.MkdirAll("resp/"+s, 0755)
|
|
}
|
|
|
|
db.Init(servers)
|
|
|
|
app := fiber.New(fiber.Config{
|
|
StrictRouting: true,
|
|
ETag: false,
|
|
})
|
|
|
|
app.Use(logger.New())
|
|
|
|
re := regexp.MustCompile(`/+`)
|
|
app.Use(func(c *fiber.Ctx) error {
|
|
c.Path(re.ReplaceAllString(c.Path(), "/"))
|
|
return c.Next()
|
|
})
|
|
|
|
routes.LoadAll(app)
|
|
|
|
app.Get("/", func(c *fiber.Ctx) error {
|
|
return c.SendString(os.Getenv("SERVER"))
|
|
})
|
|
|
|
log.Printf("Running on %s", PORT)
|
|
color.HEX("#00AABB").Printf("Server: %s\n", server)
|
|
|
|
quit := make(chan os.Signal, 1)
|
|
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
go func() {
|
|
for {
|
|
<-quit
|
|
fmt.Print("\nProceed to exit? (y/n): ")
|
|
var input string
|
|
fmt.Scanln(&input)
|
|
if input == "y" {
|
|
db.Save()
|
|
app.Shutdown()
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
|
|
app.Listen(PORT)
|
|
}
|