From 6c701ad9fe081204a4ac0373a41aa93bd8568467 Mon Sep 17 00:00:00 2001 From: Adnan Maolood Date: Sun, 21 Feb 2021 00:29:38 -0500 Subject: [PATCH] examples/stream: Showcase Server.Shutdown method --- examples/stream.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/examples/stream.go b/examples/stream.go index 607ae1c..f64f87b 100644 --- a/examples/stream.go +++ b/examples/stream.go @@ -8,6 +8,7 @@ import ( "context" "fmt" "log" + "sync" "time" "git.sr.ht/~adnano/go-gemini" @@ -31,8 +32,23 @@ func main() { GetCertificate: certificates.GetCertificate, } - if err := server.ListenAndServe(); err != nil { - log.Fatal(err) + var shutdownOnce sync.Once + var wg sync.WaitGroup + wg.Add(1) + defer wg.Wait() + mux.HandleFunc("/shutdown", func(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) { + fmt.Fprintln(w, "Shutting down...") + if flusher, ok := w.(gemini.Flusher); ok { + flusher.Flush() + } + go shutdownOnce.Do(func() { + server.Shutdown(context.Background()) + wg.Done() + }) + }) + + if err := server.ListenAndServe(context.Background()); err != nil { + log.Println(err) } }