| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | using System.Buffers;using System.Threading.Tasks;namespace System.Net.Sockets.Kcp{    /// <summary>    /// 用于调试的KCP IO 类,没有Kcp功能    /// </summary>    public class FakeKcpIO : IKcpIO    {        QueuePipe<byte[]> recv = new QueuePipe<byte[]>();        QueuePipe<byte[]> send = new QueuePipe<byte[]>();        public int Input(ReadOnlySpan<byte> span)        {            byte[] buffer = new byte[span.Length];            span.CopyTo(buffer);            recv.Write(buffer);            return 0;        }        public int Input(ReadOnlySequence<byte> span)        {            byte[] buffer = new byte[span.Length];            span.CopyTo(buffer);            return Input(buffer);        }        public async ValueTask RecvAsync(IBufferWriter<byte> writer, object options = null)        {            var buffer = await recv.ReadAsync().ConfigureAwait(false);            var target = writer.GetMemory(buffer.Length);            buffer.AsSpan().CopyTo(target.Span);            writer.Advance(buffer.Length);        }        public async ValueTask<int> RecvAsync(ArraySegment<byte> buffer, object options = null)        {            var temp = await recv.ReadAsync().ConfigureAwait(false);            temp.AsSpan().CopyTo(buffer);            return temp.Length;        }        public int Send(ReadOnlySpan<byte> span, object options = null)        {            byte[] buffer = new byte[span.Length];            span.CopyTo(buffer);            send.Write(buffer);            return 0;        }        public int Send(ReadOnlySequence<byte> span, object options = null)        {            byte[] buffer = new byte[span.Length];            span.CopyTo(buffer);            return Send(buffer);        }        public async ValueTask OutputAsync(IBufferWriter<byte> writer, object options = null)        {            var buffer = await send.ReadAsync().ConfigureAwait(false);            Write(writer, buffer);        }        private static void Write(IBufferWriter<byte> writer, byte[] buffer)        {            var span = writer.GetSpan(buffer.Length);            buffer.AsSpan().CopyTo(span);            writer.Advance(buffer.Length);        }    }}
 |