Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ SendCloseFrameAsync()

async ValueTask System.Net.WebSockets.ManagedWebSocket.SendCloseFrameAsync ( WebSocketCloseStatus closeStatus,
string closeStatusDescription,
CancellationToken cancellationToken )
inlineprivate

Definition at line 1308 of file ManagedWebSocket.cs.

1309 {
1310 byte[] buffer = null;
1311 try
1312 {
1313 int num = 2;
1314 if (string.IsNullOrEmpty(closeStatusDescription))
1315 {
1316 buffer = ArrayPool<byte>.Shared.Rent(num);
1317 }
1318 else
1319 {
1320 num += s_textEncoding.GetByteCount(closeStatusDescription);
1321 buffer = ArrayPool<byte>.Shared.Rent(num);
1322 s_textEncoding.GetBytes(closeStatusDescription, 0, closeStatusDescription.Length, buffer, 2);
1323 }
1324 ushort num2 = (ushort)closeStatus;
1325 buffer[0] = (byte)(num2 >> 8);
1326 buffer[1] = (byte)(num2 & 0xFFu);
1327 await SendFrameAsync(MessageOpcode.Close, endOfMessage: true, disableCompression: true, new Memory<byte>(buffer, 0, num), cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
1328 }
1329 finally
1330 {
1331 if (buffer != null)
1332 {
1334 }
1335 }
1336 lock (StateUpdateLock)
1337 {
1338 _sentCloseFrame = true;
1339 if (_receivedCloseFrame && _state < WebSocketState.Closed)
1340 {
1341 _state = WebSocketState.Closed;
1342 }
1343 else if (_state < WebSocketState.CloseSent)
1344 {
1345 _state = WebSocketState.CloseSent;
1346 }
1347 }
1349 {
1350 await WaitForServerToCloseConnectionAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
1351 }
1352 }
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
static readonly UTF8Encoding s_textEncoding
ValueTask SendFrameAsync(MessageOpcode opcode, bool endOfMessage, bool disableCompression, ReadOnlyMemory< byte > payloadBuffer, CancellationToken cancellationToken)
async ValueTask WaitForServerToCloseConnectionAsync(CancellationToken cancellationToken)
ConfiguredValueTaskAwaitable ConfigureAwait(bool continueOnCapturedContext)
Definition ValueTask.cs:312

References System.Net.WebSockets.ManagedWebSocket._isServer, System.Net.WebSockets.ManagedWebSocket._receivedCloseFrame, System.Net.WebSockets.ManagedWebSocket._sentCloseFrame, System.Net.WebSockets.ManagedWebSocket._state, System.buffer, System.cancellationToken, System.Threading.Tasks.ValueTask< TResult >.ConfigureAwait(), System.Net.WebSockets.ManagedWebSocket.s_textEncoding, System.Net.WebSockets.ManagedWebSocket.SendFrameAsync(), System.Buffers.ArrayPool< T >.Shared, System.Net.WebSockets.ManagedWebSocket.StateUpdateLock, and System.Net.WebSockets.ManagedWebSocket.WaitForServerToCloseConnectionAsync().

Referenced by System.Net.WebSockets.ManagedWebSocket.CloseAsyncPrivate(), and System.Net.WebSockets.ManagedWebSocket.CloseOutputAsyncCore().