From 9dbde6f393b9cd0686f7474710de2d2266690be9 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sat, 22 Nov 2025 15:25:07 -0600 Subject: [PATCH] create http client module --- http-client.go | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 http-client.go diff --git a/http-client.go b/http-client.go new file mode 100644 index 0000000..d6596eb --- /dev/null +++ b/http-client.go @@ -0,0 +1,72 @@ +package showbridge + +import ( + "fmt" + "log/slog" + "net/http" + "time" +) + +type HTTPClient struct { + config ModuleConfig + router *Router + client *http.Client +} + +func init() { + RegisterModule(ModuleRegistration{ + Type: "net.http.client", + New: func(config ModuleConfig) (Module, error) { + + return &HTTPClient{config: config}, nil + }, + }) +} + +func (hc *HTTPClient) Id() string { + return hc.config.Id +} + +func (hc *HTTPClient) Type() string { + return hc.config.Type +} + +func (hc *HTTPClient) RegisterRouter(router *Router) { + hc.router = router +} + +func (hc *HTTPClient) Run() error { + + hc.client = &http.Client{ + Timeout: 10 * time.Second, + } + + <-hc.router.Context.Done() + slog.Debug("router context done in module", "id", hc.config.Id) + return nil +} + +func (hc *HTTPClient) Output(payload any) error { + + payloadRequest, ok := payload.(*http.Request) + + if !ok { + return fmt.Errorf("net.http.client is only able to output an http.Request") + } + + if hc.client == nil { + return fmt.Errorf("net.http.client client is nil") + } + + response, err := hc.client.Do(payloadRequest) + + if err != nil { + return err + } + + if hc.router != nil { + hc.router.HandleInput(hc.config.Id, response) + } + + return nil +}