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

◆ CloseAsyncCore()

async Task System.Net.WebSockets.WebSocketBase.CloseAsyncCore ( WebSocketCloseStatus closeStatus,
string statusDescription,
CancellationToken cancellationToken )
inlineprivate

Definition at line 1134 of file WebSocketBase.cs.

1135 {
1137 if (WebSocket.IsStateTerminal(State))
1138 {
1139 return;
1140 }
1142 bool lockTaken = false;
1146 try
1147 {
1149 if (WebSocket.IsStateTerminal(State))
1150 {
1151 return;
1152 }
1154 WebSocket.ThrowOnInvalidState(State, WebSocketState.Open, WebSocketState.CloseReceived, WebSocketState.CloseSent);
1156 Task task;
1158 {
1160 if (task == null && State != WebSocketState.CloseSent)
1161 {
1163 {
1165 }
1167 }
1168 }
1169 else
1170 {
1172 }
1173 if (task != null)
1174 {
1176 try
1177 {
1178 await task.SuppressContextFlow();
1179 }
1180 catch (Exception ex)
1181 {
1184 {
1185 ThrowIfConvertibleException("CloseOutputAsync", ex, cancellationToken, linkedCancellationToken.IsCancellationRequested);
1186 throw;
1187 }
1188 }
1189 if (!lockTaken)
1190 {
1192 }
1193 }
1195 {
1196 bool flag;
1197 try
1198 {
1200 }
1201 catch (Exception)
1202 {
1204 throw;
1205 }
1206 if (flag)
1207 {
1210 }
1211 }
1212 if (WebSocket.IsStateTerminal(State))
1213 {
1214 return;
1215 }
1218 if (flag2)
1219 {
1225 WebSocketReceiveResult receiveResult = null;
1226 try
1227 {
1228 receiveResult = await task2.SuppressContextFlow();
1229 }
1230 catch (Exception ex3)
1231 {
1234 {
1235 ThrowIfConvertibleException("CloseAsync", ex3, cancellationToken, linkedCancellationToken.IsCancellationRequested);
1236 throw;
1237 }
1238 }
1239 if (receiveResult != null)
1240 {
1241 if (System.Net.NetEventSource.Log.IsEnabled() && receiveResult.Count > 0)
1242 {
1244 }
1245 if (receiveResult.MessageType != WebSocketMessageType.Close)
1246 {
1247 throw new WebSocketException(WebSocketError.InvalidMessageType, System.SR.Format(System.SR.net_WebSockets_InvalidMessageType, "WebSocket.CloseAsync", "WebSocket.CloseOutputAsync", receiveResult.MessageType));
1248 }
1249 }
1250 }
1251 else
1252 {
1255 await _closeReceivedTaskCompletionSource.Task.SuppressContextFlow();
1256 }
1257 if (!lockTaken)
1258 {
1260 }
1261 if (WebSocket.IsStateTerminal(State))
1262 {
1263 return;
1264 }
1265 bool ownsSendCancellationSource = false;
1266 try
1267 {
1269 bool flag3;
1270 try
1271 {
1273 }
1274 catch (Exception)
1275 {
1277 throw;
1278 }
1279 if (flag3)
1280 {
1283 }
1284 }
1285 finally
1286 {
1288 }
1289 }
1290 catch (Exception exception)
1291 {
1292 bool isCancellationRequested = linkedCancellationToken.IsCancellationRequested;
1293 Abort();
1295 throw;
1296 }
1297 finally
1298 {
1301 }
1302 }
static readonly System.Net.NetEventSource Log
static void DumpBuffer(object thisOrContextObject, byte[] buffer, int offset, int count, [CallerMemberName] string memberName=null)
bool TryStartOperation(CancellationToken userCancellationToken, out CancellationToken linkedCancellationToken)
void CompleteOperation(bool ownsCancellationTokenSource)
volatile WebSocketOperation.ReceiveOperation _receiveOperation
readonly OutstandingOperationHelper _closeOutstandingOperationHelper
readonly OutstandingOperationHelper _sendOutstandingOperationHelper
override Task CloseOutputAsync(WebSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken)
static void ReleaseLock(object lockObject, ref bool lockTaken)
void ThrowIfConvertibleException(string methodName, Exception exception, CancellationToken cancellationToken, bool aborted)
void ResetFlagAndTakeLock(object lockObject, ref bool thisLockTaken)
bool CanHandleExceptionDuringClose(Exception error)
volatile TaskCompletionSource _closeReceivedTaskCompletionSource
readonly OutstandingOperationHelper _receiveOutstandingOperationHelper
async Task< bool > StartOnCloseCompleted(bool thisLockTakenSnapshot, bool sessionHandleLockTakenSnapshot, CancellationToken cancellationToken)
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_WebSockets_InvalidMessageType
Definition SR.cs:160
Definition SR.cs:7
static void Enter(object obj)

References System.Net.WebSockets.WebSocketBase._closeAsyncStartedReceive, System.Net.WebSockets.WebSocketBase._closeOutputTask, System.Net.WebSockets.WebSocketBase._closeOutstandingOperationHelper, System.Net.WebSockets.WebSocketBase._closeReceivedTaskCompletionSource, System.Net.WebSockets.WebSocketBase._receiveOperation, System.Net.WebSockets.WebSocketBase._receiveOutstandingOperationHelper, System.Net.WebSockets.WebSocketBase._sendOutstandingOperationHelper, System.Net.WebSockets.WebSocketBase._thisLock, System.Net.WebSockets.WebSocketBase.Abort(), System.cancellationToken, System.Net.WebSockets.WebSocketBase.CanHandleExceptionDuringClose(), System.Net.WebSockets.WebSocketBase.CloseOutputAsync(), System.Net.WebSockets.WebSocketBase.OutstandingOperationHelper.CompleteOperation(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Net.NetEventSource.DumpBuffer(), System.Net.WebSockets.WebSocketBase.EnsureReceiveOperation(), System.Threading.Monitor.Enter(), System.exception, System.Net.WebSockets.WebSocketBase.FinishOnCloseCompleted(), System.SR.Format(), System.Net.WebSockets.WebSocket.IsStateTerminal(), System.Net.NetEventSource.Log, System.SR.net_WebSockets_InvalidMessageType, System.Threading.CancellationToken.None, System.Net.WebSockets.WebSocketBase.OnCloseOutputCompleted(), System.Net.WebSockets.WebSocketBase.ReleaseLock(), System.Net.WebSockets.WebSocketBase.ResetFlagAndTakeLock(), System.Net.WebSockets.WebSocketBase.StartOnCloseCompleted(), System.task, System.Net.WebSockets.WebSocketBase.ThrowIfConvertibleException(), System.Net.WebSockets.WebSocketBase.ThrowIfDisposed(), System.Net.WebSockets.WebSocketBase.ThrowIfPendingException(), System.Net.WebSockets.WebSocket.ThrowOnInvalidState(), and System.Net.WebSockets.WebSocketBase.OutstandingOperationHelper.TryStartOperation().

Referenced by System.Net.WebSockets.WebSocketBase.CloseAsync().