in pkg/tools/buffer/buffer.go [777:815]
func (r *Buffer) AppendDataEvent(event SocketDataBuffer) {
r.eventLocker.Lock()
defer r.eventLocker.Unlock()
defer func() {
// if the current position is not nil and the current reading data id is bigger than the event data id
if r.current != nil && r.current.DataID() > event.DataID() {
r.shouldResetPosition = true
}
}()
if r.dataEvents.Len() == 0 {
r.dataEvents.PushFront(event)
r.shouldResetPosition = true
return
}
if r.dataEvents.Back().Value.(SocketDataBuffer).DataID() < event.DataID() {
r.dataEvents.PushBack(event)
return
}
beenAdded := false
for element := r.dataEvents.Front(); element != nil; element = element.Next() {
existEvent := element.Value.(SocketDataBuffer)
if existEvent.DataID() > event.DataID() {
// data id needs order
beenAdded = true
} else if existEvent.DataID() == event.DataID() && existEvent.DataSequence() > event.DataSequence() {
// following the sequence order
beenAdded = true
}
if beenAdded {
r.dataEvents.InsertBefore(event, element)
break
}
}
if !beenAdded {
r.dataEvents.PushBack(event)
}
}