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) }