|
@ -4,6 +4,7 @@ import "time" |
|
|
|
|
|
|
|
|
type MemBuffer struct { |
|
|
type MemBuffer struct { |
|
|
buf []byte |
|
|
buf []byte |
|
|
|
|
|
size int |
|
|
startTime time.Time |
|
|
startTime time.Time |
|
|
stopTime time.Time |
|
|
stopTime time.Time |
|
|
} |
|
|
} |
|
@ -25,16 +26,30 @@ func newSealedBuffers(size int) *SealedBuffers { |
|
|
return sbs |
|
|
return sbs |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (sbs *SealedBuffers) SealBuffer(startTime, stopTime time.Time, buf []byte) (newBuf []byte) { |
|
|
|
|
|
|
|
|
func (sbs *SealedBuffers) SealBuffer(startTime, stopTime time.Time, buf []byte, pos int) (newBuf []byte) { |
|
|
oldMemBuffer := sbs.buffers[0] |
|
|
oldMemBuffer := sbs.buffers[0] |
|
|
size := len(sbs.buffers) |
|
|
size := len(sbs.buffers) |
|
|
for i := 0; i < size-1; i++ { |
|
|
for i := 0; i < size-1; i++ { |
|
|
sbs.buffers[i].buf = sbs.buffers[i+1].buf |
|
|
sbs.buffers[i].buf = sbs.buffers[i+1].buf |
|
|
|
|
|
sbs.buffers[i].size = sbs.buffers[i+1].size |
|
|
sbs.buffers[i].startTime = sbs.buffers[i+1].startTime |
|
|
sbs.buffers[i].startTime = sbs.buffers[i+1].startTime |
|
|
sbs.buffers[i].stopTime = sbs.buffers[i+1].stopTime |
|
|
sbs.buffers[i].stopTime = sbs.buffers[i+1].stopTime |
|
|
} |
|
|
} |
|
|
sbs.buffers[size-1].buf = buf |
|
|
sbs.buffers[size-1].buf = buf |
|
|
|
|
|
sbs.buffers[size-1].size = pos |
|
|
sbs.buffers[size-1].startTime = startTime |
|
|
sbs.buffers[size-1].startTime = startTime |
|
|
sbs.buffers[size-1].stopTime = stopTime |
|
|
sbs.buffers[size-1].stopTime = stopTime |
|
|
return oldMemBuffer.buf |
|
|
return oldMemBuffer.buf |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (mb *MemBuffer) locateByTs(lastReadTime time.Time) (pos int) { |
|
|
|
|
|
lastReadTs := lastReadTime.UnixNano() |
|
|
|
|
|
for pos < len(mb.buf) { |
|
|
|
|
|
size, t := readTs(mb.buf, pos) |
|
|
|
|
|
if t > lastReadTs { |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
pos += size + 4 |
|
|
|
|
|
} |
|
|
|
|
|
return len(mb.buf) |
|
|
|
|
|
} |