Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
StreamFramer.cs
Go to the documentation of this file.
2using System.IO;
5
6namespace System.Net;
7
8internal sealed class StreamFramer
9{
10 private readonly FrameHeader _writeHeader = new FrameHeader();
11
12 private readonly FrameHeader _curReadHeader = new FrameHeader();
13
14 private readonly byte[] _readHeaderBuffer = new byte[5];
15
16 private readonly byte[] _writeHeaderBuffer = new byte[5];
17
18 private bool _eof;
19
21
23
24 public async ValueTask<byte[]> ReadMessageAsync<TAdapter>(TAdapter adapter) where TAdapter : IReadWriteAdapter
25 {
26 if (_eof)
27 {
28 return null;
29 }
31 int num;
32 for (int offset = 0; offset < buffer.Length; offset += num)
33 {
34 num = await adapter.ReadAsync(buffer.AsMemory(offset)).ConfigureAwait(continueOnCapturedContext: false);
35 if (num == 0)
36 {
37 if (offset == 0)
38 {
39 _eof = true;
40 return null;
41 }
43 }
44 }
46 if (_curReadHeader.PayloadSize > 65535)
47 {
49 }
51 for (int offset = 0; offset < buffer.Length; offset += num)
52 {
53 num = await adapter.ReadAsync(buffer.AsMemory(offset)).ConfigureAwait(continueOnCapturedContext: false);
54 if (num == 0)
55 {
57 }
58 }
59 return buffer;
60 }
61
62 public async Task WriteMessageAsync<TAdapter>(TAdapter adapter, byte[] message) where TAdapter : IReadWriteAdapter
63 {
64 if (message == null)
65 {
66 throw new ArgumentNullException("message");
67 }
68 _writeHeader.PayloadSize = message.Length;
70 await adapter.WriteAsync(_writeHeaderBuffer, 0, _writeHeaderBuffer.Length).ConfigureAwait(continueOnCapturedContext: false);
71 if (message.Length != 0)
72 {
73 await adapter.WriteAsync(message, 0, message.Length).ConfigureAwait(continueOnCapturedContext: false);
74 }
75 }
76}
void CopyTo(byte[] dest, int start)
void CopyFrom(byte[] bytes, int start)
readonly byte[] _readHeaderBuffer
readonly FrameHeader _writeHeader
readonly FrameHeader _curReadHeader
async Task WriteMessageAsync< TAdapter >(TAdapter adapter, byte[] message)
async ValueTask< byte[]> ReadMessageAsync< TAdapter >(TAdapter adapter)
readonly byte[] _writeHeaderBuffer
static string net_io_readfailure
Definition SR.cs:158
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_frame_size
Definition SR.cs:84
static string net_io_connectionclosed
Definition SR.cs:160
Definition SR.cs:7