This commit is contained in:
@@ -14,7 +14,7 @@ type CartPacketQueue struct {
|
|||||||
|
|
||||||
const CurrentPacketVersion = 2
|
const CurrentPacketVersion = 2
|
||||||
|
|
||||||
type CartListener map[CartId]chan []byte
|
type CartListener map[CartId]Listener
|
||||||
|
|
||||||
func NewCartPacketQueue(connection net.Conn) *CartPacketQueue {
|
func NewCartPacketQueue(connection net.Conn) *CartPacketQueue {
|
||||||
|
|
||||||
@@ -58,13 +58,16 @@ func (p *CartPacketQueue) HandleConnection(connection net.Conn) error {
|
|||||||
func (p *CartPacketQueue) HandleData(t uint32, id CartId, data []byte) {
|
func (p *CartPacketQueue) HandleData(t uint32, id CartId, data []byte) {
|
||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
defer p.mu.Unlock()
|
defer p.mu.Unlock()
|
||||||
l, ok := p.expectedPackages[t]
|
pl, ok := p.expectedPackages[t]
|
||||||
if ok {
|
if ok {
|
||||||
ch, ok := (*l)[id]
|
l, ok := (*pl)[id]
|
||||||
if ok {
|
if ok {
|
||||||
ch <- data
|
l.Chan <- data
|
||||||
close(ch)
|
l.Count--
|
||||||
delete(*l, id)
|
if l.Count == 0 {
|
||||||
|
close(l.Chan)
|
||||||
|
delete(*pl, id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data = nil
|
data = nil
|
||||||
@@ -75,17 +78,24 @@ func (p *CartPacketQueue) Expect(messageType uint32, id CartId) <-chan []byte {
|
|||||||
defer p.mu.Unlock()
|
defer p.mu.Unlock()
|
||||||
l, ok := p.expectedPackages[messageType]
|
l, ok := p.expectedPackages[messageType]
|
||||||
if ok {
|
if ok {
|
||||||
if ch, idOk := (*l)[id]; idOk {
|
if idl, idOk := (*l)[id]; idOk {
|
||||||
return ch
|
idl.Count++
|
||||||
|
return idl.Chan
|
||||||
}
|
}
|
||||||
ch := make(chan []byte)
|
ch := make(chan []byte)
|
||||||
(*l)[id] = ch
|
(*l)[id] = Listener{
|
||||||
|
Chan: ch,
|
||||||
|
Count: 1,
|
||||||
|
}
|
||||||
return ch
|
return ch
|
||||||
}
|
}
|
||||||
|
|
||||||
ch := make(chan []byte)
|
ch := make(chan []byte)
|
||||||
p.expectedPackages[messageType] = &CartListener{
|
p.expectedPackages[messageType] = &CartListener{
|
||||||
id: ch,
|
id: Listener{
|
||||||
|
Chan: ch,
|
||||||
|
Count: 1,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return ch
|
return ch
|
||||||
|
|||||||
Reference in New Issue
Block a user