47 lines
965 B
Go
47 lines
965 B
Go
package pollmessage
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
"github.com/lmika/events"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type Service struct {
|
|
store MessageStore
|
|
poller MessagePoller
|
|
queue string
|
|
bus *events.Bus
|
|
}
|
|
|
|
func NewService(store MessageStore, poller MessagePoller, queue string, bus *events.Bus) *Service {
|
|
return &Service{
|
|
store: store,
|
|
poller: poller,
|
|
queue: queue,
|
|
bus: bus,
|
|
}
|
|
}
|
|
|
|
// Poll starts polling for new messages and adding them to the message store
|
|
func (s *Service) Poll(ctx context.Context) error {
|
|
for ctx.Err() == nil {
|
|
log.Printf("polling for new messages: %v", s.queue)
|
|
newMsgs, err := s.poller.PollForNewMessages(ctx, s.queue)
|
|
if err != nil {
|
|
return errors.Wrap(err, "unable to poll for messages")
|
|
}
|
|
|
|
for _, msg := range newMsgs {
|
|
if err := s.store.Save(ctx, msg); err != nil {
|
|
log.Printf("warn: unable to save new message %v", err)
|
|
continue
|
|
}
|
|
}
|
|
|
|
s.bus.Fire("new-messages", newMsgs)
|
|
}
|
|
return nil
|
|
}
|