1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
package main
import (
"encoding/json"
"flag"
"html/template"
"io"
"log"
"net/http"
"os"
"git.brandonirizarry.xyz/adventure/internal/types"
)
func main() {
// Set up log flags.
log.SetFlags(log.LstdFlags | log.Lshortfile)
// Get any command-line flags (port, etc.)
port := flag.String("port", "8080", "Server port")
filename := flag.String("json", "adventure.json", "Adventure file (JSON)")
flag.Parse()
// Get the JSON.
f, err := os.Open(*filename)
if err != nil {
log.Fatal(err)
}
defer f.Close()
jsonBytes, err := io.ReadAll(f)
if err != nil {
log.Fatal(err)
}
var cfg types.Config
if err := json.Unmarshal(jsonBytes, &cfg.Story); err != nil {
log.Fatal(err)
}
// Set up all the templates needed for the story arcs.
indexTmpl, err := template.ParseGlob("views/*.gohtml")
if err != nil {
log.Fatal(err)
}
cfg.Template = indexTmpl
// Set up the handlers and server.
mux := http.NewServeMux()
mux.Handle("/{arc}", &cfg)
mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("views/static"))))
log.Fatal(runServer(mux, *port))
}
func runServer(h http.Handler, port string) error {
srv := http.Server{
Addr: ":" + port,
Handler: h,
}
log.Printf("Serving on port %s...\n", port)
return srv.ListenAndServe()
}
|