mirror of https://github.com/knative/docs.git
46 lines
871 B
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()
|
|
}
|