Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
StreamFramer.cs
Go to the documentation of this file.
1
using
System.Globalization
;
2
using
System.IO
;
3
using
System.Net.Security
;
4
using
System.Threading.Tasks
;
5
6
namespace
System.Net
;
7
8
internal
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
20
public
FrameHeader
ReadHeader
=>
_curReadHeader
;
21
22
public
FrameHeader
WriteHeader
=>
_writeHeader
;
23
24
public
async
ValueTask<byte[]>
ReadMessageAsync<TAdapter>
(TAdapter adapter) where TAdapter :
IReadWriteAdapter
25
{
26
if
(
_eof
)
27
{
28
return
null
;
29
}
30
byte
[]
buffer
=
_readHeaderBuffer
;
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
}
42
throw
new
IOException
(
System
.
SR
.
Format
(
System
.
SR
.
net_io_readfailure
,
System
.
SR
.
net_io_connectionclosed
));
43
}
44
}
45
_curReadHeader
.
CopyFrom
(
buffer
, 0);
46
if
(
_curReadHeader
.
PayloadSize
> 65535)
47
{
48
throw
new
InvalidOperationException
(
System
.
SR
.
Format
(
System
.
SR
.
net_frame_size
, 65535,
_curReadHeader
.
PayloadSize
.ToString(
NumberFormatInfo
.
InvariantInfo
)));
49
}
50
buffer
=
new
byte
[
_curReadHeader
.
PayloadSize
];
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
{
56
throw
new
IOException
(
System
.
SR
.
Format
(
System
.
SR
.
net_io_readfailure
,
System
.
SR
.
net_io_connectionclosed
));
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;
69
_writeHeader
.
CopyTo
(
_writeHeaderBuffer
, 0);
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
}
System.ArgumentNullException
Definition
ArgumentNullException.cs:10
System.Globalization.NumberFormatInfo.InvariantInfo
static NumberFormatInfo InvariantInfo
Definition
NumberFormatInfo.cs:72
System.Globalization.NumberFormatInfo
Definition
NumberFormatInfo.cs:4
System.IO.IOException
Definition
IOException.cs:9
System.InvalidOperationException
Definition
InvalidOperationException.cs:9
System.Net.FrameHeader.CopyTo
void CopyTo(byte[] dest, int start)
Definition
FrameHeader.cs:31
System.Net.FrameHeader.PayloadSize
int PayloadSize
Definition
FrameHeader.cs:16
System.Net.FrameHeader.CopyFrom
void CopyFrom(byte[] bytes, int start)
Definition
FrameHeader.cs:40
System.Net.FrameHeader
Definition
FrameHeader.cs:4
System.Net.StreamFramer._eof
bool _eof
Definition
StreamFramer.cs:18
System.Net.StreamFramer.WriteHeader
FrameHeader WriteHeader
Definition
StreamFramer.cs:22
System.Net.StreamFramer._readHeaderBuffer
readonly byte[] _readHeaderBuffer
Definition
StreamFramer.cs:14
System.Net.StreamFramer._writeHeader
readonly FrameHeader _writeHeader
Definition
StreamFramer.cs:10
System.Net.StreamFramer._curReadHeader
readonly FrameHeader _curReadHeader
Definition
StreamFramer.cs:12
System.Net.StreamFramer.WriteMessageAsync< TAdapter >
async Task WriteMessageAsync< TAdapter >(TAdapter adapter, byte[] message)
Definition
StreamFramer.cs:62
System.Net.StreamFramer.ReadMessageAsync< TAdapter >
async ValueTask< byte[]> ReadMessageAsync< TAdapter >(TAdapter adapter)
Definition
StreamFramer.cs:24
System.Net.StreamFramer.ReadHeader
FrameHeader ReadHeader
Definition
StreamFramer.cs:20
System.Net.StreamFramer._writeHeaderBuffer
readonly byte[] _writeHeaderBuffer
Definition
StreamFramer.cs:16
System.Net.StreamFramer
Definition
StreamFramer.cs:9
System.SR.net_io_readfailure
static string net_io_readfailure
Definition
SR.cs:158
System.SR.Format
static string Format(string resourceFormat, object p1)
Definition
SR.cs:118
System.SR.net_frame_size
static string net_frame_size
Definition
SR.cs:84
System.SR.net_io_connectionclosed
static string net_io_connectionclosed
Definition
SR.cs:160
System.SR
Definition
SR.cs:7
System.Threading.Tasks.Task
Definition
Task.cs:14
System.Net.Security.IReadWriteAdapter
Definition
IReadWriteAdapter.cs:7
System.Globalization
Definition
Calendar.cs:1
System.IO
Definition
ConsoleStream.cs:3
System.Net.Security
Definition
CertificateHelper.cs:4
System.Net
Definition
HttpClientJsonExtensions.cs:8
System.Threading.Tasks
Definition
TaskToApm.cs:3
System.ExceptionArgument.offset
@ offset
System.ExceptionArgument.buffer
@ buffer
System
Definition
BlockingCollection.cs:8
System.Threading.Tasks.ValueTask
Definition
ValueTask.cs:321
source
System.Net.Security
System.Net
StreamFramer.cs
Generated by
1.10.0