more efficient read
All checks were successful
Build and Publish / BuildAndDeploy (push) Successful in 1m56s
All checks were successful
Build and Publish / BuildAndDeploy (push) Successful in 1m56s
This commit is contained in:
@@ -34,9 +34,7 @@ func NewCartPacketQueue(connection net.Conn) *CartPacketQueue {
|
||||
var packet CartPacket
|
||||
for {
|
||||
err := ReadCartPacket(connection, &packet)
|
||||
ts := time.Now()
|
||||
if err != nil {
|
||||
|
||||
if err == io.EOF {
|
||||
return
|
||||
}
|
||||
@@ -49,30 +47,39 @@ func NewCartPacketQueue(connection net.Conn) *CartPacketQueue {
|
||||
log.Printf("Error receiving packet data: %v\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
queue.mu.Lock()
|
||||
|
||||
l := make([]CartPacketWithData, 0, len(queue.Packets))
|
||||
|
||||
for _, packet := range queue.Packets {
|
||||
if !packet.Consumed && packet.Added.After(ts.Add(-time.Second)) {
|
||||
l = append(l, packet)
|
||||
}
|
||||
}
|
||||
|
||||
queue.Packets = append(l, CartPacketWithData{
|
||||
MessageType: packet.MessageType,
|
||||
Id: packet.Id,
|
||||
Added: ts,
|
||||
Data: data,
|
||||
})
|
||||
queue.mu.Unlock()
|
||||
|
||||
go queue.HandleData(packet.MessageType, packet.Id, data)
|
||||
}
|
||||
}()
|
||||
return queue
|
||||
}
|
||||
|
||||
func (p *CartPacketQueue) HandleData(t uint32, id CartId, data []byte) {
|
||||
ts := time.Now()
|
||||
cap := 150
|
||||
l := make([]CartPacketWithData, 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([]CartPacketWithData{
|
||||
{
|
||||
MessageType: t,
|
||||
Id: id,
|
||||
Added: ts,
|
||||
Data: data,
|
||||
},
|
||||
}, l...)
|
||||
p.mu.Unlock()
|
||||
}
|
||||
|
||||
func (p *CartPacketQueue) Expect(messageType uint32, id CartId, timeToWait time.Duration) (*CartPacketWithData, error) {
|
||||
start := time.Now().Add(-time.Millisecond)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user