59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
using DotNetty.Buffers;
 | 
						|
using DotNetty.Common;
 | 
						|
 | 
						|
namespace fec.fec
 | 
						|
{
 | 
						|
    public class FecPacket
 | 
						|
    {
 | 
						|
        private long seqid;
 | 
						|
        private int flag;
 | 
						|
        private IByteBuffer data;
 | 
						|
 | 
						|
        private readonly ThreadLocalPool.Handle recyclerHandle;
 | 
						|
 | 
						|
 | 
						|
        private static readonly ThreadLocalPool<FecPacket> fecPacketRecycler =
 | 
						|
            new ThreadLocalPool<FecPacket>(handle => new FecPacket(handle));
 | 
						|
 | 
						|
        private FecPacket(ThreadLocalPool.Handle recyclerHandle)
 | 
						|
        {
 | 
						|
            this.recyclerHandle = recyclerHandle;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public static FecPacket newFecPacket(IByteBuffer byteBuf)
 | 
						|
        {
 | 
						|
            FecPacket pkt = fecPacketRecycler.Take();
 | 
						|
            pkt.seqid = byteBuf.ReadUnsignedIntLE();
 | 
						|
            pkt.flag = byteBuf.ReadUnsignedShortLE();
 | 
						|
            pkt.data = byteBuf.RetainedSlice(byteBuf.ReaderIndex, byteBuf.Capacity - byteBuf.ReaderIndex);
 | 
						|
            pkt.data.SetWriterIndex(byteBuf.ReadableBytes);
 | 
						|
            return pkt;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public void release()
 | 
						|
        {
 | 
						|
            this.seqid = 0;
 | 
						|
            this.flag = 0;
 | 
						|
            this.data.Release();
 | 
						|
            this.data = null;
 | 
						|
            recyclerHandle.Release(this);
 | 
						|
        }
 | 
						|
 | 
						|
        public long Seqid
 | 
						|
        {
 | 
						|
            get => seqid;
 | 
						|
        }
 | 
						|
 | 
						|
        public int Flag
 | 
						|
        {
 | 
						|
            get => flag;
 | 
						|
        }
 | 
						|
 | 
						|
        public IByteBuffer Data
 | 
						|
        {
 | 
						|
            get => data;
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |