wordsearch/standalone/main.go
Ray Miller 0ecc755b66 Update standalone server
* Use embedded data sources
* Optionally listen on a Unix domain socket
* Server htmx and CSS from remote CDNs.
2024-05-04 14:01:35 +01:00

72 lines
1.5 KiB
Go

package main
import (
"embed"
"encoding/gob"
"flag"
"log"
"net"
"net/http"
"strings"
"github.com/ray1729/wordsearch/anagram"
"github.com/ray1729/wordsearch/match"
"github.com/ray1729/wordsearch/standalone/server"
)
//go:embed data/*
var fs embed.FS
var anagramDB anagram.DB
var matchDB match.DB
func initializeDB() error {
anagrams, err := fs.Open("data/anagram.bin")
if err != nil {
return err
}
defer anagrams.Close()
if err := gob.NewDecoder(anagrams).Decode(&anagramDB); err != nil {
return err
}
matches, err := fs.Open("data/match.bin")
if err != nil {
return err
}
defer matches.Close()
if err := gob.NewDecoder(matches).Decode(&matchDB); err != nil {
return err
}
return nil
}
func init() {
if err := initializeDB(); err != nil {
log.Fatalf("error initializing databases: %v", err)
}
}
func main() {
var listenAddr = flag.String("listen", ":8000", "Address or port to listen on, prefix with unix: to listen on a Unix domain socket")
flag.Parse()
server := http.Server{
Handler: server.New(matchDB, anagramDB),
}
var listener net.Listener
var err error
if strings.HasPrefix(*listenAddr, "unix:") {
listener, err = net.Listen("unix", strings.TrimPrefix(*listenAddr, "unix:"))
} else {
listener, err = net.Listen("tcp", *listenAddr)
}
if err != nil {
log.Fatalf("Error listening on %s: %v", *listenAddr, err)
}
log.Printf("Listening on %s", *listenAddr)
if err := server.Serve(listener); err != nil {
log.Fatal(err)
}
}