refactor(backend-internal): dry builder

This commit is contained in:
Alex Kaminskii 2022-05-11 18:51:55 +02:00
parent c77966a789
commit e65fa58ab5
2 changed files with 29 additions and 20 deletions

View file

@ -18,7 +18,7 @@ func NewBuilder(handlers ...handlers.MessageProcessor) *builder {
}
}
func (b *builder) iterateReadyMessage(iter func(msg Message)) {
func (b *builder) iterateReadyMessages(iter func(msg Message)) {
for _, readyMsg := range b.readyMsgs {
iter(readyMsg)
}
@ -44,10 +44,10 @@ func (b *builder) handleMessage(message Message, messageID uint64) {
return
}
b.checkSessionEnd(message)
for _, p := range b.processors {
if rm := p.Handle(message, messageID, b.timestamp); rm != nil {
b.readyMsgs = append(b.readyMsgs, rm)
}
}
b.checkSessionEnd(message)
}

View file

@ -20,7 +20,7 @@ func NewBuilderMap(handlers ...handlers.MessageProcessor) *builderMap {
func (m *builderMap) GetBuilder(sessionID uint64) *builder {
b := m.sessions[sessionID]
if b == nil {
b = NewBuilder(m.handlers...)
b = NewBuilder(m.handlers...) // Should create new instances
m.sessions[sessionID] = b
}
return b
@ -31,21 +31,29 @@ func (m *builderMap) HandleMessage(sessionID uint64, msg Message, messageID uint
b.handleMessage(msg, messageID)
}
func (m *builderMap) IterateReadyMessages(iter func(sessionID uint64, msg Message)) {
for sessionID, b := range m.sessions {
if b.ended {
for _, p := range b.processors {
if rm := p.Build(); rm != nil {
b.readyMsgs = append(b.readyMsgs, rm)
}
func (m *builderMap) iterateSessionReadyMessages(sessionID uint64, b *builder, iter func(msg Message)) {
if b.ended {
for _, p := range b.processors {
if rm := p.Build(); rm != nil {
b.readyMsgs = append(b.readyMsgs, rm)
}
}
b.iterateReadyMessage(func(msg Message) {
iter(sessionID, msg)
})
if b.ended {
delete(m.sessions, sessionID)
}
}
b.iterateReadyMessage(iter)
if b.ended {
delete(m.sessions, sessionID)
}
}
func (m *builderMap) IterateReadyMessages(iter func(sessionID uint64, msg Message)) {
for sessionID, session := range m.sessions {
m.iterateSessionReadyMessages(
sessionID,
session,
func(msg Message) {
iter(sessionID, msg)
},
)
}
}
@ -54,8 +62,9 @@ func (m *builderMap) IterateSessionReadyMessages(sessionID uint64, iter func(msg
if !ok {
return
}
session.iterateReadyMessage(iter)
if session.ended {
delete(m.sessions, sessionID)
}
m.iterateSessionReadyMessages(
sessionID,
session,
inter,
)
}