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;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |