78 lines
1.7 KiB
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)
|
|
}
|