Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
LegacyNetBufferPool.cs
Go to the documentation of this file.
1
using
System
;
2
using
System.Collections.Generic
;
3
4
namespace
Terraria.Net
;
5
6
public
class
LegacyNetBufferPool
7
{
8
private
const
int
SMALL_BUFFER_SIZE
= 256;
9
10
private
const
int
MEDIUM_BUFFER_SIZE
= 1024;
11
12
private
const
int
LARGE_BUFFER_SIZE
= 16384;
13
14
private
static
object
bufferLock
=
new
object();
15
16
private
static
Queue<byte[]>
_smallBufferQueue
=
new
Queue<byte[]>
();
17
18
private
static
Queue<byte[]>
_mediumBufferQueue
=
new
Queue<byte[]>
();
19
20
private
static
Queue<byte[]>
_largeBufferQueue
=
new
Queue<byte[]>
();
21
22
private
static
int
_smallBufferCount
;
23
24
private
static
int
_mediumBufferCount
;
25
26
private
static
int
_largeBufferCount
;
27
28
private
static
int
_customBufferCount
;
29
30
public
static
byte
[]
RequestBuffer
(
int
size)
31
{
32
lock
(
bufferLock
)
33
{
34
if
(size <= 256)
35
{
36
if
(
_smallBufferQueue
.Count == 0)
37
{
38
_smallBufferCount
++;
39
return
new
byte
[256];
40
}
41
return
_smallBufferQueue
.Dequeue();
42
}
43
if
(size <= 1024)
44
{
45
if
(
_mediumBufferQueue
.Count == 0)
46
{
47
_mediumBufferCount
++;
48
return
new
byte
[1024];
49
}
50
return
_mediumBufferQueue
.Dequeue();
51
}
52
if
(size <= 16384)
53
{
54
if
(
_largeBufferQueue
.Count == 0)
55
{
56
_largeBufferCount
++;
57
return
new
byte
[16384];
58
}
59
return
_largeBufferQueue
.Dequeue();
60
}
61
_customBufferCount
++;
62
return
new
byte
[size];
63
}
64
}
65
66
public
static
byte
[]
RequestBuffer
(
byte
[] data,
int
offset
,
int
size)
67
{
68
byte
[]
array
=
RequestBuffer
(size);
69
Buffer
.
BlockCopy
(data,
offset
,
array
, 0, size);
70
return
array
;
71
}
72
73
public
static
void
ReturnBuffer
(
byte
[]
buffer
)
74
{
75
int
num =
buffer
.Length;
76
lock
(
bufferLock
)
77
{
78
if
(num <= 256)
79
{
80
_smallBufferQueue
.Enqueue(
buffer
);
81
}
82
else
if
(num <= 1024)
83
{
84
_mediumBufferQueue
.Enqueue(
buffer
);
85
}
86
else
if
(num <= 16384)
87
{
88
_largeBufferQueue
.Enqueue(
buffer
);
89
}
90
}
91
}
92
93
public
static
void
DisplayBufferSizes
()
94
{
95
lock
(
bufferLock
)
96
{
97
Main
.
NewText
(
"Small Buffers: "
+
_smallBufferQueue
.Count +
" queued of "
+
_smallBufferCount
);
98
Main
.
NewText
(
"Medium Buffers: "
+
_mediumBufferQueue
.Count +
" queued of "
+
_mediumBufferCount
);
99
Main
.
NewText
(
"Large Buffers: "
+
_largeBufferQueue
.Count +
" queued of "
+
_largeBufferCount
);
100
Main
.
NewText
(
"Custom Buffers: 0 queued of "
+
_customBufferCount
);
101
}
102
}
103
104
public
static
void
PrintBufferSizes
()
105
{
106
lock
(
bufferLock
)
107
{
108
Console
.
WriteLine
(
"Small Buffers: "
+
_smallBufferQueue
.Count +
" queued of "
+
_smallBufferCount
);
109
Console
.
WriteLine
(
"Medium Buffers: "
+
_mediumBufferQueue
.Count +
" queued of "
+
_mediumBufferCount
);
110
Console
.
WriteLine
(
"Large Buffers: "
+
_largeBufferQueue
.Count +
" queued of "
+
_largeBufferCount
);
111
Console
.
WriteLine
(
"Custom Buffers: 0 queued of "
+
_customBufferCount
);
112
Console
.
WriteLine
(
""
);
113
}
114
}
115
}
System.Buffer.BlockCopy
static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count)
Definition
Buffer.cs:102
System.Buffer
Definition
Buffer.cs:8
System.Collections.Generic.Dictionary
Definition
Dictionary.cs:14
System.Console.WriteLine
static void WriteLine()
Definition
Console.cs:733
System.Console
Definition
Console.cs:11
Terraria.Main.NewText
static void NewText(string newText, byte R=byte.MaxValue, byte G=byte.MaxValue, byte B=byte.MaxValue)
Definition
Main.cs:61429
Terraria.Main
Definition
Main.cs:79
Terraria.Net.LegacyNetBufferPool._largeBufferCount
static int _largeBufferCount
Definition
LegacyNetBufferPool.cs:26
Terraria.Net.LegacyNetBufferPool.SMALL_BUFFER_SIZE
const int SMALL_BUFFER_SIZE
Definition
LegacyNetBufferPool.cs:8
Terraria.Net.LegacyNetBufferPool._mediumBufferQueue
static Queue< byte[]> _mediumBufferQueue
Definition
LegacyNetBufferPool.cs:18
Terraria.Net.LegacyNetBufferPool.RequestBuffer
static byte[] RequestBuffer(int size)
Definition
LegacyNetBufferPool.cs:30
Terraria.Net.LegacyNetBufferPool._customBufferCount
static int _customBufferCount
Definition
LegacyNetBufferPool.cs:28
Terraria.Net.LegacyNetBufferPool.ReturnBuffer
static void ReturnBuffer(byte[] buffer)
Definition
LegacyNetBufferPool.cs:73
Terraria.Net.LegacyNetBufferPool.DisplayBufferSizes
static void DisplayBufferSizes()
Definition
LegacyNetBufferPool.cs:93
Terraria.Net.LegacyNetBufferPool._smallBufferQueue
static Queue< byte[]> _smallBufferQueue
Definition
LegacyNetBufferPool.cs:16
Terraria.Net.LegacyNetBufferPool._smallBufferCount
static int _smallBufferCount
Definition
LegacyNetBufferPool.cs:22
Terraria.Net.LegacyNetBufferPool._largeBufferQueue
static Queue< byte[]> _largeBufferQueue
Definition
LegacyNetBufferPool.cs:20
Terraria.Net.LegacyNetBufferPool.MEDIUM_BUFFER_SIZE
const int MEDIUM_BUFFER_SIZE
Definition
LegacyNetBufferPool.cs:10
Terraria.Net.LegacyNetBufferPool.LARGE_BUFFER_SIZE
const int LARGE_BUFFER_SIZE
Definition
LegacyNetBufferPool.cs:12
Terraria.Net.LegacyNetBufferPool.bufferLock
static object bufferLock
Definition
LegacyNetBufferPool.cs:14
Terraria.Net.LegacyNetBufferPool.PrintBufferSizes
static void PrintBufferSizes()
Definition
LegacyNetBufferPool.cs:104
Terraria.Net.LegacyNetBufferPool.RequestBuffer
static byte[] RequestBuffer(byte[] data, int offset, int size)
Definition
LegacyNetBufferPool.cs:66
Terraria.Net.LegacyNetBufferPool._mediumBufferCount
static int _mediumBufferCount
Definition
LegacyNetBufferPool.cs:24
Terraria.Net.LegacyNetBufferPool
Definition
LegacyNetBufferPool.cs:7
System.Collections.Generic
Definition
IHashKeyCollection.cs:1
System.ExceptionArgument.offset
@ offset
System.ExceptionArgument.buffer
@ buffer
System.ExceptionArgument.array
@ array
System
Definition
BlockingCollection.cs:8
Terraria.Net
Definition
ISocket.cs:1
source
Terraria.Net
LegacyNetBufferPool.cs
Generated by
1.10.0