spud/daemon/daemon.go

49 lines
1.1 KiB
Go
Raw Normal View History

2024-10-02 02:56:25 +00:00
package daemon
import (
"context"
2024-10-02 02:56:25 +00:00
"fmt"
"net/http"
service "spud/service"
2024-10-02 02:56:25 +00:00
)
type Daemon struct {
Host string
Port int
Services service.ServiceClient
Routes map[string]http.HandlerFunc
2024-10-02 02:56:25 +00:00
}
type HandlerFuncWithContext = func(w http.ResponseWriter, r *http.Request, c context.Context)
func handleFuncWithContext(h HandlerFuncWithContext, c context.Context) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
h(w, r, c)
}
}
func NewDaemon(host string, port int, serviceClient service.ServiceClient) *Daemon {
d := &Daemon{Host: host, Port: port}
if serviceClient == nil {
d.Services = &service.PodmanServiceClient{}
} else {
d.Services = serviceClient
}
return d
2024-10-02 02:56:25 +00:00
}
func (d Daemon) GetListenAddress() string {
return fmt.Sprintf("%s:%d", d.Host, d.Port)
}
func (d Daemon) Start() {
daemonContext := context.WithValue(context.Background(), "client", d.Services)
2024-10-02 02:56:25 +00:00
for route, handler := range GetApiRoutes() {
http.HandleFunc(route, handleFuncWithContext(handler, daemonContext))
2024-10-02 02:56:25 +00:00
}
http.ListenAndServe(d.GetListenAddress(), nil)
}