more efficient read
All checks were successful
Build and Publish / BuildAndDeploy (push) Successful in 1m56s

This commit is contained in:
matst80
2024-11-11 19:40:29 +01:00
parent 74e5dc6b4e
commit e63a92213b
2 changed files with 55 additions and 39 deletions

View File

@@ -33,9 +33,7 @@ func NewPacketQueue(connection net.Conn) *PacketQueue {
var packet Packet
for {
err := ReadPacket(connection, &packet)
ts := time.Now()
if err != nil {
if err == io.EOF {
return
}
@@ -46,28 +44,39 @@ func NewPacketQueue(connection net.Conn) *PacketQueue {
if err != nil {
log.Printf("Error receiving packet data: %v\n", err)
}
queue.mu.Lock()
l := make([]PacketWithData, 0, len(queue.Packets))
for _, packet := range queue.Packets {
if !packet.Consumed && packet.Added.After(ts.Add(-time.Second)) {
l = append(l, packet)
}
}
packetQueue.Set(float64(len(queue.Packets)))
queue.Packets = append(l, PacketWithData{
MessageType: packet.MessageType,
Added: ts,
Data: data,
})
queue.mu.Unlock()
packetsReceived.Inc()
go queue.HandleData(packet.MessageType, data)
}
}()
return queue
}
func (p *PacketQueue) HandleData(t uint32, data []byte) {
ts := time.Now()
cap := 150
l := make([]PacketWithData, 0, cap)
p.mu.RLock()
breakAt := ts.Add(-time.Millisecond * 250)
for _, packet := range p.Packets {
if !packet.Consumed && packet.Added.After(breakAt) {
l = append(l, packet)
if len(l) >= cap {
break
}
}
}
p.mu.RUnlock()
p.mu.Lock()
p.Packets = append([]PacketWithData{
{
MessageType: t,
Added: ts,
Data: data,
},
}, l...)
p.mu.Unlock()
}
func (p *PacketQueue) Expect(messageType uint32, timeToWait time.Duration) (*PacketWithData, error) {
start := time.Now().Add(-time.Millisecond)