package rest import ( "context" v2 "github.com/waku-org/go-waku/waku/v2" "github.com/waku-org/go-waku/waku/v2/protocol" ) type Adder func(msg *protocol.Envelope) type runnerService struct { broadcaster v2.Broadcaster ch chan *protocol.Envelope cancel context.CancelFunc adder Adder } func newRunnerService(broadcaster v2.Broadcaster, adder Adder) *runnerService { return &runnerService{ broadcaster: broadcaster, adder: adder, } } func (r *runnerService) Start(ctx context.Context) { ctx, cancel := context.WithCancel(ctx) r.ch = make(chan *protocol.Envelope, 1024) r.cancel = cancel r.broadcaster.Register(nil, r.ch) for { select { case <-ctx.Done(): return case envelope := <-r.ch: r.adder(envelope) } } } func (r *runnerService) Stop() { if r.cancel == nil { return } r.cancel() r.broadcaster.Unregister(nil, r.ch) close(r.ch) }