Dreamine.Communication.Core 1.0.2
Dreamine.Communication.Core 통신 기능과 관련 API를 제공합니다.
로딩중...
검색중...
일치하는것 없음
RawAvailableMessageFrameCodec.cs
이 파일의 문서화 페이지로 가기
1using System.Buffers;
2
4
22{
31 private readonly int _bufferSize;
32
42 : this(8192)
43 {
44 }
45
70 public RawAvailableMessageFrameCodec(int bufferSize)
71 {
72 if (bufferSize <= 0)
73 {
74 throw new ArgumentOutOfRangeException(nameof(bufferSize));
75 }
76
77 _bufferSize = bufferSize;
78 }
79
136 public async Task WriteFrameAsync(
137 Stream stream,
138 byte[] payload,
139 CancellationToken cancellationToken = default)
140 {
141 ArgumentNullException.ThrowIfNull(stream);
142 ArgumentNullException.ThrowIfNull(payload);
143
144 await stream.WriteAsync(payload, cancellationToken).ConfigureAwait(false);
145 await stream.FlushAsync(cancellationToken).ConfigureAwait(false);
146 }
147
196 public async Task<byte[]?> ReadFrameAsync(
197 Stream stream,
198 CancellationToken cancellationToken = default)
199 {
200 ArgumentNullException.ThrowIfNull(stream);
201
202 var buffer = ArrayPool<byte>.Shared.Rent(_bufferSize);
203
204 try
205 {
206 var read = await stream.ReadAsync(
207 buffer.AsMemory(0, _bufferSize),
208 cancellationToken)
209 .ConfigureAwait(false);
210
211 if (read == 0)
212 {
213 return null;
214 }
215
216 var payload = new byte[read];
217 Buffer.BlockCopy(buffer, 0, payload, 0, read);
218
219 return payload;
220 }
221 finally
222 {
223 ArrayPool<byte>.Shared.Return(buffer);
224 }
225 }
226}
async Task WriteFrameAsync(Stream stream, byte[] payload, CancellationToken cancellationToken=default)
async Task< byte[]?> ReadFrameAsync(Stream stream, CancellationToken cancellationToken=default)