123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package internal
- import (
- "context"
- "crypto/tls"
- "fmt"
- "net/http"
- "zero/core/proc"
- )
- func StartHttp(host string, port int, handler http.Handler) error {
- addr := fmt.Sprintf("%s:%d", host, port)
- server := buildHttpServer(addr, handler)
- return StartServer(server)
- }
- func StartHttps(host string, port int, certFile, keyFile string, handler http.Handler) error {
- addr := fmt.Sprintf("%s:%d", host, port)
- if server, err := buildHttpsServer(addr, handler, certFile, keyFile); err != nil {
- return err
- } else {
- return StartServer(server)
- }
- }
- func StartServer(srv *http.Server) error {
- proc.AddWrapUpListener(func() {
- srv.Shutdown(context.Background())
- })
- return srv.ListenAndServe()
- }
- func buildHttpServer(addr string, handler http.Handler) *http.Server {
- return &http.Server{Addr: addr, Handler: handler}
- }
- func buildHttpsServer(addr string, handler http.Handler, certFile, keyFile string) (*http.Server, error) {
- cert, err := tls.LoadX509KeyPair(certFile, keyFile)
- if err != nil {
- return nil, err
- }
- config := tls.Config{Certificates: []tls.Certificate{cert}}
- return &http.Server{
- Addr: addr,
- Handler: handler,
- TLSConfig: &config,
- }, nil
- }
|