代码拉取完成,页面将自动刷新
package rtp
import (
"gitee.com/sy_183/go-common/pool"
"net"
"time"
)
type Packet interface {
Layer
AddRelation(relation pool.Reference)
Clear()
pool.Reference
}
func UsePacket(packet Packet) Packet {
packet.AddRef()
return packet
}
type IncomingPacket struct {
*IncomingLayer
addr net.Addr
time time.Time
relations pool.Relations
pool pool.Pool[*IncomingPacket]
}
func NewIncomingPacket(layer *IncomingLayer, pool pool.Pool[*IncomingPacket]) *IncomingPacket {
return &IncomingPacket{IncomingLayer: layer, pool: pool}
}
func ProvideIncomingPacket(p pool.Pool[*IncomingPacket]) *IncomingPacket {
return NewIncomingPacket(NewIncomingLayer(), p)
}
func (p *IncomingPacket) Addr() net.Addr {
return p.addr
}
func (p *IncomingPacket) SetAddr(addr net.Addr) {
p.addr = addr
}
func (p *IncomingPacket) Time() time.Time {
return p.time
}
func (p *IncomingPacket) SetTime(t time.Time) {
p.time = t
}
func (p *IncomingPacket) AddRelation(relation pool.Reference) {
p.relations.AddRelation(relation)
}
func (p *IncomingPacket) Clear() {
p.relations.Clear()
p.addr = nil
p.time = time.Time{}
}
func (p *IncomingPacket) Release() bool {
if p.relations.Release() {
p.Clear()
if p.pool != nil {
p.pool.Put(p)
}
return true
}
return false
}
func (p *IncomingPacket) AddRef() {
p.relations.AddRef()
}
func (p *IncomingPacket) Use() *IncomingPacket {
p.AddRef()
return p
}
type DefaultPacket struct {
DefaultLayer
relations pool.Relations
pool pool.Pool[*DefaultPacket]
}
func NewDefaultPacket(pool pool.Pool[*DefaultPacket], payload Payload) *DefaultPacket {
p := &DefaultPacket{pool: pool}
p.Init(payload)
return p
}
func DefaultPacketProvider(payloadProvider func() Payload) func(pool pool.Pool[*DefaultPacket]) *DefaultPacket {
return func(pool pool.Pool[*DefaultPacket]) *DefaultPacket {
return NewDefaultPacket(pool, payloadProvider())
}
}
func (p *DefaultPacket) AddRelation(relation pool.Reference) {
p.relations.AddRelation(relation)
}
func (p *DefaultPacket) Clear() {
p.relations.Clear()
p.Header.Clear()
if p.payload != nil {
p.payload.Clear()
}
}
func (p *DefaultPacket) Release() bool {
if p.relations.Release() {
p.Clear()
if p.pool != nil {
p.pool.Put(p)
}
return true
}
return false
}
func (p *DefaultPacket) AddRef() {
p.relations.AddRef()
}
func (p *DefaultPacket) Use() *DefaultPacket {
p.AddRef()
return p
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。