openreplay/backend/pkg/messages/iterator-ender.go
Alexander 4608911f5b
Sink and Ender message iterators refactoring (#1038)
* feat(backend): removed duplicate code in ender message iterator

* feat(backend): removed duplicate code in sink message iterator
2023-03-16 10:53:05 +01:00

30 lines
801 B
Go

package messages
type enderIteratorImpl struct {
coreIterator MessageIterator
handler MessageHandler
lastMessage Message
}
func NewEnderMessageIterator(messageHandler MessageHandler, messageFilter []int, autoDecode bool) MessageIterator {
enderIter := &enderIteratorImpl{
handler: messageHandler,
}
enderIter.coreIterator = NewMessageIterator(enderIter.handle, messageFilter, autoDecode)
return enderIter
}
func (e *enderIteratorImpl) handle(message Message) {
e.lastMessage = message
}
func (e *enderIteratorImpl) Iterate(batchData []byte, batchInfo *BatchInfo) {
// Reset last message
e.lastMessage = nil
// Call core iterator
e.coreIterator.Iterate(batchData, batchInfo)
// Call handler if last message is not nil
if e.lastMessage != nil {
e.handler(e.lastMessage)
}
}