0ecc755b66
* Use embedded data sources * Optionally listen on a Unix domain socket * Server htmx and CSS from remote CDNs.
72 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|