kartograph-maps/pkg/web/service.go

75 lines
1.6 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("wastelands"))
if err != nil {
wastelands = 7
}
mountains, err := strconv.Atoi(req.URL.Query().Get("mountains"))
if err != nil {
mountains = 5
}
ruins, err := strconv.Atoi(req.URL.Query().Get("ruins"))
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) {
log.Printf("GET / (%v)", req.RemoteAddr)
tpl, err := template.ParseFS(templateFiles, "templates/index.tpl.html")
if err != nil {
log.Fatal(err)
}
tpl.Execute(w, nil)
}