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