48 lines
937 B
Go
48 lines
937 B
Go
|
|
package internal
|
||
|
|
|
||
|
|
import (
|
||
|
|
"net/http"
|
||
|
|
)
|
||
|
|
|
||
|
|
// NewHTTPService returns a service that can be used to start a http server
|
||
|
|
// that will generate diagrams.
|
||
|
|
func NewHTTPService(generator Generator) *httpService {
|
||
|
|
return &httpService{
|
||
|
|
generator: generator,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// httpService is a service that can be used to start a http server
|
||
|
|
// that will generate diagrams.
|
||
|
|
type httpService struct {
|
||
|
|
httpServer *http.Server
|
||
|
|
generator Generator
|
||
|
|
}
|
||
|
|
|
||
|
|
// Start starts the HTTP server.
|
||
|
|
func (s *httpService) Start() error {
|
||
|
|
httpHandler := generateHTTPHandler(s.generator)
|
||
|
|
|
||
|
|
r := http.NewServeMux()
|
||
|
|
r.Handle("/generate", http.HandlerFunc(httpHandler))
|
||
|
|
|
||
|
|
s.httpServer = &http.Server{
|
||
|
|
Addr: ":80",
|
||
|
|
Handler: r,
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := s.httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||
|
|
if err != http.ErrServerClosed {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *httpService) Stop() {
|
||
|
|
if s != nil {
|
||
|
|
_ = s.httpServer.Close()
|
||
|
|
}
|
||
|
|
}
|