package main
import (
"context"
"flag"
"io"
"log"
"net/http"
"os"
"os/signal"
"plugin"
unit "unit.nginx.org/go"
)
func main() {
s := flag.String("mod", "", "path to module")
flag.Parse()
if *s == "" {
flag.PrintDefaults()
os.Exit(1)
}
p, err := plugin.Open(*s)
if err != nil {
log.Fatalf("could not load plugin: %s", err)
}
sym, err := p.Lookup("InitModule")
if err != nil {
log.Fatalf("could not find InitModule symbol: %s", err)
}
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
c, handler := sym.(func(context.Context) (io.Closer, http.Handler))(ctx)
defer c.Close()
log.Print("starting webserver")
err = unit.ListenAndServe(":6969", handler)
if err != nil {
log.Fatalf("handling webserver: %s", err)
}
}