docs/vendor/github.com/cloudevents/sdk-go/v2/client/http_receiver.go

46 lines
871 B
Go

package client
import (
"context"
"net/http"
"sync"
thttp "github.com/cloudevents/sdk-go/v2/protocol/http"
)
func NewHTTPReceiveHandler(ctx context.Context, p *thttp.Protocol, fn interface{}) (*EventReceiver, error) {
invoker, err := newReceiveInvoker(fn)
if err != nil {
return nil, err
}
return &EventReceiver{
p: p,
invoker: invoker,
}, nil
}
type EventReceiver struct {
p *thttp.Protocol
invoker Invoker
}
func (r *EventReceiver) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
wg := sync.WaitGroup{}
wg.Add(1)
go func() {
r.p.ServeHTTP(rw, req)
wg.Done()
}()
ctx := req.Context()
msg, respFn, err := r.p.Respond(ctx)
if err != nil {
//lint:ignore SA9003 TODO: Branch left empty
} else if err := r.invoker.Invoke(ctx, msg, respFn); err != nil {
// TODO
}
// Block until ServeHTTP has returned
wg.Wait()
}