EdgexAgent/device-ble-go/vendor/github.com/openziti/sdk-golang/xgress/payload_ingester.go
2025-07-10 20:40:32 +08:00

61 lines
1.3 KiB
Go

package xgress
import "time"
type payloadEntry struct {
payload *Payload
x *Xgress
}
type PayloadIngester struct {
payloadIngest chan *payloadEntry
payloadSendReq chan *Xgress
receiveBufferInspects chan *receiveBufferInspectEvent
closeNotify <-chan struct{}
}
func NewPayloadIngester(closeNotify <-chan struct{}) *PayloadIngester {
pi := &PayloadIngester{
payloadIngest: make(chan *payloadEntry, 16),
payloadSendReq: make(chan *Xgress, 16),
receiveBufferInspects: make(chan *receiveBufferInspectEvent, 4),
closeNotify: closeNotify,
}
go pi.run()
return pi
}
func (self *PayloadIngester) inspect(evt *receiveBufferInspectEvent, timeout <-chan time.Time) bool {
select {
case self.receiveBufferInspects <- evt:
return true
case <-self.closeNotify:
case <-timeout:
}
return false
}
func (self *PayloadIngester) ingest(payload *Payload, x *Xgress) {
self.payloadIngest <- &payloadEntry{
payload: payload,
x: x,
}
}
func (self *PayloadIngester) run() {
for {
select {
case payloadEntry := <-self.payloadIngest:
payloadEntry.x.acceptPayload(payloadEntry.payload)
case x := <-self.payloadSendReq:
x.queueSends()
case evt := <-self.receiveBufferInspects:
evt.handle()
case <-self.closeNotify:
return
}
}
}