openreplay/backend/services/db/heuristics/heuristics.go
2021-05-03 17:53:25 +02:00

65 lines
1.2 KiB
Go

package heuristics
import (
. "openreplay/backend/pkg/messages"
. "openreplay/backend/pkg/db/types"
)
type MessageHandler interface {
HandleMessage(Message)
}
type ReadyMessagesIterator interface {
IterateReadyMessages(func(Message))
}
type Handler interface {
MessageHandler
ReadyMessagesIterator
}
type mainHandler map[uint64]*sessHandler
func NewHandler() mainHandler {
return make(mainHandler)
}
func (m mainHandler) getSessHandler(session *Session) *sessHandler {
if session == nil {
//AAAA
return nil
}
s := m[session.SessionID]
if s == nil {
s = newSessHandler(session)
m[session.SessionID] = s
}
return s
}
func (m mainHandler) HandleMessage(session *Session, msg Message) {
s := m.getSessHandler(session)
s.HandleMessage(msg)
}
func (m mainHandler) IterateSessionReadyMessages(sessionID uint64, iter func(msg Message)) {
s, ok := m[ sessionID ]
if !ok { return }
s.IterateReadyMessages(iter)
if s.IsEnded() {
delete(m, sessionID)
}
}
func (m mainHandler) IterateReadyMessages(iter func(sessionID uint64, msg Message)) {
for sessionID, s := range m {
s.IterateReadyMessages(func(msg Message) {
iter(sessionID, msg)
})
if s.IsEnded() {
delete(m, sessionID)
}
}
}