kartograph-maps/pkg/web/service.go

78 lines
1.7 KiB
Go

package web
import (
"embed"
"f00860/kartograph-map-editor/pkg/generator"
"html/template"
"io"
"log"
"net/http"
"strconv"
"time"
)
//go:embed templates
var templateFiles embed.FS
//go:embed static
var staticFiles embed.FS
func Start(address string, port int) {
http.Handle("/static/", http.FileServer(http.FS(staticFiles)))
http.HandleFunc("/", indexHandler)
http.HandleFunc("/map.svg", mapHandler)
addr := address + ":" + strconv.Itoa(port)
log.Printf("Server started on %v ...", addr)
err := http.ListenAndServe(addr, nil)
if err != nil {
log.Fatal(err)
}
}
func mapHandler(w http.ResponseWriter, req *http.Request) {
size, err := strconv.Atoi(req.URL.Query().Get("size"))
if err != nil {
size = 11
}
seed := req.URL.Query().Get("seed")
if seed == "" {
seed = time.Now().String()
}
wastelands, err := strconv.Atoi(req.URL.Query().Get("w"))
if err != nil {
wastelands = 7
}
mountains, err := strconv.Atoi(req.URL.Query().Get("m"))
if err != nil {
mountains = 5
}
ruins, err := strconv.Atoi(req.URL.Query().Get("r"))
if err != nil {
ruins = 6
}
world := generator.New(size, wastelands, mountains, ruins, seed)
log.Printf("GET /map.svg?%v (%v)", req.URL.Query().Encode(), req.RemoteAddr)
w.Header().Set("Content-Type", "image/svg+xml")
w.Header().Set("Content-Length", strconv.Itoa(len(world.SVG())))
io.WriteString(w, world.SVG())
}
func indexHandler(w http.ResponseWriter, req *http.Request) {
seed := generator.RandomSeed()
world := generator.New(11, 7, 5, 6, seed)
log.Printf("GET / (%v) Seed: %v", req.RemoteAddr, seed)
tpl, err := template.ParseFS(templateFiles, "templates/index.tpl.html")
if err != nil {
log.Fatal(err)
}
tpl.Execute(w, world)
}