65 lines
1.2 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|
|
|
|
|