43 lines
775 B
Go
43 lines
775 B
Go
|
|
package api
|
||
|
|
|
||
|
|
import (
|
||
|
|
"log"
|
||
|
|
"net/http"
|
||
|
|
"os"
|
||
|
|
"os/signal"
|
||
|
|
"syscall"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Server struct {
|
||
|
|
addr string
|
||
|
|
mux *http.ServeMux
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewServer(addr string) *Server {
|
||
|
|
mux := http.NewServeMux()
|
||
|
|
return &Server{addr: addr, mux: mux}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Server) Start() error {
|
||
|
|
handler := NewHandler("default-seed")
|
||
|
|
handler.RegisterRoutes(s.mux)
|
||
|
|
|
||
|
|
server := &http.Server{
|
||
|
|
Addr: s.addr,
|
||
|
|
Handler: s.mux,
|
||
|
|
}
|
||
|
|
|
||
|
|
go func() {
|
||
|
|
log.Printf("Go-Faker API server starting on %s", s.addr)
|
||
|
|
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||
|
|
log.Fatalf("Server failed: %v", err)
|
||
|
|
}
|
||
|
|
}()
|
||
|
|
|
||
|
|
quit := make(chan os.Signal, 1)
|
||
|
|
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||
|
|
<-quit
|
||
|
|
|
||
|
|
log.Println("Shutting down server...")
|
||
|
|
return server.Close()
|
||
|
|
}
|