12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using System.Buffers;
- namespace System.Net.Sockets.Kcp
- {
- public abstract class KcpOutputWriter : IKcpOutputWriter
- {
- public IMemoryOwner<byte> MemoryOwner { get; set; }
- public int UnflushedBytes { get; set; }
- public void Flush()
- {
- Output(MemoryOwner, UnflushedBytes);
- MemoryOwner = null;
- UnflushedBytes = 0;
- }
- public void Advance(int count)
- {
- UnflushedBytes += count;
- }
- public Memory<byte> GetMemory(int sizeHint = 0)
- {
- if (MemoryOwner == null)
- {
- MemoryOwner = MemoryPool<byte>.Shared.Rent(2048);
- }
- return MemoryOwner.Memory.Slice(UnflushedBytes);
- }
- public Span<byte> GetSpan(int sizeHint = 0)
- {
- if (MemoryOwner == null)
- {
- MemoryOwner = MemoryPool<byte>.Shared.Rent(2048);
- }
- return MemoryOwner.Memory.Span.Slice(UnflushedBytes);
- }
- /// <summary>
- /// Socket发送是要pin byte[],为了不阻塞KcpFlush,动态缓存是必须的。
- /// </summary>
- /// <param name="buffer"></param>
- /// <param name="avalidLength"></param>
- public abstract void Output(IMemoryOwner<byte> buffer, int avalidLength);
- }
- }
|