using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading; using BestHTTP.Extensions; using BestHTTP.Logger; using BestHTTP.WebSocket.Frames; using Cpp2IlInjected; namespace BestHTTP.WebSocket { // Token: 0x020018CA RID: 6346 [Token(Token = "0x20018CA")] public sealed class WebSocketResponse : HTTPResponse, IHeartbeat, IProtocol { // Token: 0x170017B3 RID: 6067 // (get) Token: 0x06009524 RID: 38180 RVA: 0x001EAC20 File Offset: 0x001E8E20 // (set) Token: 0x06009525 RID: 38181 RVA: 0x001EAC34 File Offset: 0x001E8E34 [Token(Token = "0x170017B3")] public WebSocket WebSocket { [Token(Token = "0x6009524")] [Address(RVA = "0x5F4E40", Offset = "0x5F3C40", VA = "0x1805F4E40")] get; [Token(Token = "0x6009525")] [Address(RVA = "0x7CB600", Offset = "0x7CA400", VA = "0x1807CB600")] internal set; } // Token: 0x170017B4 RID: 6068 // (get) Token: 0x06009526 RID: 38182 RVA: 0x001EAC48 File Offset: 0x001E8E48 [Token(Token = "0x170017B4")] public bool IsClosed { [Token(Token = "0x6009526")] [Address(RVA = "0x1C44C10", Offset = "0x1C43A10", VA = "0x181C44C10", Slot = "7")] get { return this.closed; } } // Token: 0x170017B5 RID: 6069 // (get) Token: 0x06009527 RID: 38183 RVA: 0x001EAC5C File Offset: 0x001E8E5C // (set) Token: 0x06009528 RID: 38184 RVA: 0x001EAC70 File Offset: 0x001E8E70 [Token(Token = "0x170017B5")] public TimeSpan PingFrequnecy { [Token(Token = "0x6009527")] [Address(RVA = "0x60CF40", Offset = "0x60BD40", VA = "0x18060CF40")] get; [Token(Token = "0x6009528")] [Address(RVA = "0x7B58A0", Offset = "0x7B46A0", VA = "0x1807B58A0")] private set; } // Token: 0x170017B6 RID: 6070 // (get) Token: 0x06009529 RID: 38185 RVA: 0x001EAC84 File Offset: 0x001E8E84 // (set) Token: 0x0600952A RID: 38186 RVA: 0x001EAC98 File Offset: 0x001E8E98 [Token(Token = "0x170017B6")] public ushort MaxFragmentSize { [Token(Token = "0x6009529")] [Address(RVA = "0x1C44C30", Offset = "0x1C43A30", VA = "0x181C44C30")] get; [Token(Token = "0x600952A")] [Address(RVA = "0x1C44C40", Offset = "0x1C43A40", VA = "0x181C44C40")] private set; } // Token: 0x170017B7 RID: 6071 // (get) Token: 0x0600952B RID: 38187 RVA: 0x001EACAC File Offset: 0x001E8EAC [Token(Token = "0x170017B7")] public int BufferedAmount { [Token(Token = "0x600952B")] [Address(RVA = "0x60CFD0", Offset = "0x60BDD0", VA = "0x18060CFD0")] get { return this._bufferedAmount; } } // Token: 0x170017B8 RID: 6072 // (get) Token: 0x0600952C RID: 38188 RVA: 0x001EACC0 File Offset: 0x001E8EC0 // (set) Token: 0x0600952D RID: 38189 RVA: 0x001EACD4 File Offset: 0x001E8ED4 [Token(Token = "0x170017B8")] public int Latency { [Token(Token = "0x600952C")] [Address(RVA = "0xD027E0", Offset = "0xD015E0", VA = "0x180D027E0")] get; [Token(Token = "0x600952D")] [Address(RVA = "0xD00030", Offset = "0xCFEE30", VA = "0x180D00030")] private set; } // Token: 0x0600952E RID: 38190 RVA: 0x001EACE8 File Offset: 0x001E8EE8 [Token(Token = "0x600952E")] [Address(RVA = "0x1C449D0", Offset = "0x1C437D0", VA = "0x181C449D0")] internal WebSocketResponse(HTTPRequest request, Stream stream, bool isStreamed, bool isFromCache) { List list = new List(); this.IncompleteFrames = list; List list2 = new List(); this.CompletedFrames = list2; List list3 = new List(); this.frameCache = list3; object obj = new object(); this.FrameLock = obj; object obj2 = new object(); this.SendLock = obj2; List list4 = new List(); this.unsentFrames = list4; int num; AutoResetEvent autoResetEvent = new AutoResetEvent(num != 0); num = 0; this.newFrameSignal = autoResetEvent; DateTime minValue = DateTime.MinValue; this.lastPing = minValue; DateTime minValue2 = DateTime.MinValue; this.lastMessage = minValue2; CircularBuffer circularBuffer = new CircularBuffer(WebSocketResponse.RTTBufferCapacity); this.rtts = circularBuffer; this.k__BackingField = true; this.MaxFragmentSize = (ushort)((uint)32767); this.closed = false; } // Token: 0x0600952F RID: 38191 RVA: 0x001EADA8 File Offset: 0x001E8FA8 [Token(Token = "0x600952F")] [Address(RVA = "0x1C44920", Offset = "0x1C43720", VA = "0x181C44920")] internal void StartReceive() { bool flag = ThreadPool.QueueUserWorkItem(new WaitCallback(this.ReceiveThreadFunc)); } // Token: 0x06009530 RID: 38192 RVA: 0x001EADC8 File Offset: 0x001E8FC8 [Token(Token = "0x6009530")] [Address(RVA = "0x1C42360", Offset = "0x1C41160", VA = "0x181C42360")] internal void CloseStream() { ConnectionBase connectionWith = HTTPManager.GetConnectionWith(this.baseRequest); if (connectionWith != 0) { connectionWith.Abort((HTTPConnectionStates)((uint)9)); return; } } // Token: 0x06009531 RID: 38193 RVA: 0x001EADF0 File Offset: 0x001E8FF0 [Token(Token = "0x6009531")] [Address(RVA = "0x1C44450", Offset = "0x1C43250", VA = "0x181C44450")] public void Send(string message) { int num; WebSocketFrame webSocketFrame; do { num = 0; if (message == 0) { goto IL_A2; } object obj = Encoding.UTF8.Clone(); byte[] bytes = Encoding.UTF8.GetBytes(message); byte[] k__BackingField = webSocketFrame.k__BackingField; if (k__BackingField == 0) { goto IL_99; } ushort num2 = this.k__BackingField; if (k__BackingField.Length <= (int)num2) { goto IL_99; } WebSocketFrame[] array = webSocketFrame.Fragment(num2); object sendLock = this.SendLock; this.Send(webSocketFrame); if (array != 0 && num < array.Length) { WebSocketFrame webSocketFrame2 = array[num]; this.Send(webSocketFrame2); num++; } Monitor.Exit(sendLock); } while (num != 0); if (num != -1) { } IL_99: this.Send(webSocketFrame); return; IL_A2: ArgumentNullException ex = new ArgumentNullException("message must not be null!"); throw new IndexOutOfRangeException(); } // Token: 0x06009532 RID: 38194 RVA: 0x001EAEB0 File Offset: 0x001E90B0 [Token(Token = "0x6009532")] [Address(RVA = "0x1C43D70", Offset = "0x1C42B70", VA = "0x181C43D70")] public void Send(byte[] data) { int num; WebSocketFrame webSocketFrame; do { num = 0; if (data == 0) { goto IL_9D; } int length; ulong num2; ulong num3; webSocketFrame = new WebSocketFrame(this.k__BackingField, (WebSocketFrameTypes)((ulong)2L), data, (ulong)num, (ulong)length, num2 != 0UL, num3 != 0UL); length = data.Length; byte[] k__BackingField = webSocketFrame.k__BackingField; if (k__BackingField == 0) { goto IL_95; } ushort num4 = this.k__BackingField; if (k__BackingField.Length <= (int)num4) { goto IL_95; } WebSocketFrame[] array = webSocketFrame.Fragment(num4); object sendLock = this.SendLock; this.Send(webSocketFrame); if (array != 0 && num < array.Length) { WebSocketFrame webSocketFrame2 = array[num]; this.Send(webSocketFrame2); num++; } Monitor.Exit(sendLock); } while (num != 0); if (num != -1) { } IL_95: this.Send(webSocketFrame); return; IL_9D: ArgumentNullException ex = new ArgumentNullException("data must not be null!"); throw new IndexOutOfRangeException(); } // Token: 0x06009533 RID: 38195 RVA: 0x001EAF6C File Offset: 0x001E916C [Token(Token = "0x6009533")] [Address(RVA = "0x1C43F90", Offset = "0x1C42D90", VA = "0x181C43F90")] public void Send(byte[] data, ulong offset, ulong count) { int num; WebSocketFrame webSocketFrame; do { num = 0; if (data == 0) { goto IL_85; } int length = data.Length; byte[] k__BackingField = webSocketFrame.k__BackingField; if (k__BackingField == 0) { goto IL_7D; } ushort num2 = this.k__BackingField; if (k__BackingField.Length <= (int)num2) { goto IL_7D; } WebSocketFrame[] array = webSocketFrame.Fragment(num2); object sendLock = this.SendLock; this.Send(webSocketFrame); if (array != 0 && num < array.Length) { WebSocketFrame webSocketFrame2 = array[num]; this.Send(webSocketFrame2); num++; } Monitor.Exit(sendLock); } while (num != 0); if (num != -1) { } IL_7D: this.Send(webSocketFrame); return; IL_85: ArgumentNullException ex = new ArgumentNullException("data must not be null!"); throw new IndexOutOfRangeException(); } // Token: 0x06009534 RID: 38196 RVA: 0x001EB010 File Offset: 0x001E9210 [Token(Token = "0x6009534")] [Address(RVA = "0x1C44200", Offset = "0x1C43000", VA = "0x181C44200")] public void Send(WebSocketFrame frame) { int num; do { num = 0; if (frame == 0) { goto IL_7C; } if (this.closed || this.closeSent) { return; } object sendLock = this.SendLock; this.unsentFrames.Add(frame); if (!this.sendThreadCreated) { ILogger logger = HTTPManager.Logger; bool flag = ThreadPool.QueueUserWorkItem(new WaitCallback(this.SendThreadFunc)); this.sendThreadCreated = true; } Monitor.Exit(sendLock); } while (num != 0); if (frame.k__BackingField != (ulong)0L) { } bool flag2 = this.newFrameSignal.Set(); return; IL_7C: ArgumentNullException ex = new ArgumentNullException("frame is null!"); throw new NullReferenceException(); } // Token: 0x06009535 RID: 38197 RVA: 0x001EB0B0 File Offset: 0x001E92B0 [Token(Token = "0x6009535")] [Address(RVA = "0x1C42770", Offset = "0x1C41570", VA = "0x181C42770")] public void Insert(WebSocketFrame frame) { int num; do { num = 0; if (frame == 0) { goto IL_83; } if (this.closed || this.closeSent) { return; } object sendLock = this.SendLock; List list = this.unsentFrames; int num2 = 0; list.Insert(num2, frame); if (!this.sendThreadCreated) { ILogger logger = HTTPManager.Logger; bool flag = ThreadPool.QueueUserWorkItem(new WaitCallback(this.SendThreadFunc)); this.sendThreadCreated = true; } Monitor.Exit(sendLock); } while (num != 0); if (frame.k__BackingField != (ulong)0L) { } bool flag2 = this.newFrameSignal.Set(); return; IL_83: ArgumentNullException ex = new ArgumentNullException("frame is null!"); throw new NullReferenceException(); } // Token: 0x06009536 RID: 38198 RVA: 0x001EB158 File Offset: 0x001E9358 [Token(Token = "0x6009536")] [Address(RVA = "0x1C43420", Offset = "0x1C42220", VA = "0x181C43420")] public void SendNow(WebSocketFrame frame) { /* An exception occurred when decompiling this method (06009536) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void BestHTTP.WebSocket.WebSocketResponse::SendNow(BestHTTP.WebSocket.Frames.WebSocketFrame) ---> System.Exception: Basic block has to end with unconditional control flow. { IL_3C: stloc:ArgumentNullException(var_4_46, newobj:ArgumentNullException(ArgumentNullException::.ctor, ldstr:string("frame is null!"))) } at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852 at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355 at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123 at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88 --- End of inner exception stack trace --- at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92 at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663 */; } // Token: 0x06009537 RID: 38199 RVA: 0x001EB1AC File Offset: 0x001E93AC [Token(Token = "0x6009537")] [Address(RVA = "0x1C42730", Offset = "0x1C41530", VA = "0x181C42730")] public void Close() { } // Token: 0x06009538 RID: 38200 RVA: 0x001EB1BC File Offset: 0x001E93BC [Token(Token = "0x6009538")] [Address(RVA = "0x1C42590", Offset = "0x1C41390", VA = "0x181C42590")] public void Close(ushort code, string msg) { int num; do { num = 0; if (this.closed) { return; } object sendLock = this.SendLock; this.unsentFrames.Clear(); Monitor.Exit(sendLock); } while (num != 0); WebSocket webSocket = this.k__BackingField; byte[] array = WebSocket.EncodeCloseData(code, msg); ulong num2; int num3; ulong num4; ulong num5; WebSocketFrame webSocketFrame = new WebSocketFrame(webSocket, (WebSocketFrameTypes)((ulong)8L), array, num2, (ulong)num3, num4 != 0UL, num5 != 0UL); if (array != 0) { } num3 = 0; this.Send(webSocketFrame); } // Token: 0x06009539 RID: 38201 RVA: 0x001EB234 File Offset: 0x001E9434 [Token(Token = "0x6009539")] [Address(RVA = "0x1C44750", Offset = "0x1C43550", VA = "0x181C44750")] public void StartPinging(int frequency) { Delegate @delegate; int num; do { TimeSpan timeSpan; this.k__BackingField = timeSpan; DateTime utcNow = DateTime.UtcNow; this.lastMessage = utcNow; this.SendPing(); HTTPManager.Heartbeats.Subscribe(this); Action onApplicationForegroundStateChanged = HTTPUpdateDelegator.OnApplicationForegroundStateChanged; Action action = new Action(this.OnApplicationForegroundStateChanged); @delegate = Delegate.Combine(onApplicationForegroundStateChanged, action); num = 0; } while (@delegate != 0 && @delegate == 0); HTTPUpdateDelegator.OnApplicationForegroundStateChanged = num; } // Token: 0x0600953A RID: 38202 RVA: 0x001EB2AC File Offset: 0x001E94AC [Token(Token = "0x600953A")] [Address(RVA = "0x1C437B0", Offset = "0x1C425B0", VA = "0x181C437B0")] private void SendThreadFunc(object param) { int num; do { num = 0; List list = new List(); if (!this.closed && !this.closeSent) { AutoResetEvent autoResetEvent = this.newFrameSignal; object sendLock = this.SendLock; int size = this.unsentFrames._size; List list2 = this.unsentFrames; list.Clear(); Monitor.Exit(sendLock); if (num != 0) { goto IL_118; } if ((ulong)((uint)(-1)) != (ulong)(-1L)) { } int size2 = list._size; list.RemoveAt(size2); if (!this.closeSent) { int num2 = this.Stream.ReadByte(); if (num != 0) { goto IL_11E; } if ((ulong)((uint)(-1)) != (ulong)(-1L)) { } this.closeSent = true; } Stream stream = this.Stream; HTTPRequest baseRequest = this.baseRequest; baseRequest.k__BackingField = (HTTPRequestStates)((ulong)5L); this.baseRequest.k__BackingField = baseRequest; this.baseRequest.k__BackingField = (HTTPRequestStates)((ulong)4L); this.closed = true; } this.sendThreadCreated = false; AutoResetEvent autoResetEvent2 = this.newFrameSignal; this.newFrameSignal = (ulong)0L; ILogger logger = HTTPManager.Logger; } while (num != 0); return; IL_118: throw new NullReferenceException(); IL_11E: throw new NullReferenceException(); } // Token: 0x0600953B RID: 38203 RVA: 0x001EB40C File Offset: 0x001E960C [Token(Token = "0x600953B")] [Address(RVA = "0x1C42A30", Offset = "0x1C41830", VA = "0x181C42A30")] private void ReceiveThreadFunc(object param) { for (;;) { int num = 0; ReadOnlyBufferedStream readOnlyBufferedStream = new ReadOnlyBufferedStream(this.Stream); int num2 = 0; uint num3; if (!this.closed) { DateTime utcNow = DateTime.UtcNow; this.lastMessage = utcNow; if (utcNow > (ulong)10L) { goto IL_69; } if (this.OnIncompleteFrame == (ulong)0L) { goto IL_8C; } object frameLock = this.FrameLock; List completedFrames = this.CompletedFrames; num3 += (uint)1; Monitor.Exit(frameLock); if (num != 0) { goto IL_247; } if (num3 != (uint)(-1)) { goto IL_69; } IL_9F: WebSocket webSocket = this.k__BackingField; object frameLock2 = this.FrameLock; List completedFrames2 = this.CompletedFrames; num3 += (uint)1; Monitor.Exit(frameLock2); if (num != 0) { goto IL_253; } if (num3 != (uint)(-1)) { } if (this.closeSent || this.closed) { continue; } WebSocketFrame webSocketFrame; if (!this.closeSent) { this.Send(webSocketFrame); } this.closed = true; this.Send(webSocketFrame); long num4; num4 -= num4; TimeSpan timeSpan = TimeSpan.FromTicks(num4); CircularBuffer circularBuffer = this.rtts; int num5 = 0; circularBuffer.Add(num5); int num6 = this.CalculateLatency(); this.k__BackingField = num6; int num7 = 0; Monitor.Exit(circularBuffer); if (num != 0) { goto IL_26B; } if (num3 != (uint)(-1)) { } IL_154: this.IncompleteFrames.Add(num7); uint num8; this.Close((ushort)num8, "Protocol Error: masked frame received from server!"); this.IncompleteFrames.Clear(); this.baseRequest.k__BackingField = (HTTPRequestStates)((ulong)5L); this.closed = true; HTTPRequest baseRequest; if (!this.newFrameSignal.Set()) { baseRequest = this.baseRequest; baseRequest.k__BackingField = (HTTPRequestStates)((ulong)5L); } this.baseRequest.k__BackingField = baseRequest; this.baseRequest.k__BackingField = (HTTPRequestStates)((ulong)4L); this.closed = true; AutoResetEvent autoResetEvent = this.newFrameSignal; goto IL_1D8; IL_69: if (this.OnIncompleteFrame == (ulong)0L) { goto IL_154; } object frameLock3 = this.FrameLock; List completedFrames3 = this.CompletedFrames; num3 += (uint)1; IL_8C: List incompleteFrames = this.IncompleteFrames; this.IncompleteFrames.Clear(); goto IL_9F; } IL_1D8: num3 += (uint)1; if (num2 != 0) { } if (num == 0) { if (num3 != (uint)(-1)) { } HTTPManager.Heartbeats.Unsubscribe(this); Action onApplicationForegroundStateChanged = HTTPUpdateDelegator.OnApplicationForegroundStateChanged; Action action = new Action(this.OnApplicationForegroundStateChanged); Delegate @delegate = Delegate.Remove(onApplicationForegroundStateChanged, action); if (@delegate == 0 || @delegate != 0) { HTTPUpdateDelegator.OnApplicationForegroundStateChanged = @delegate; ILogger logger = HTTPManager.Logger; if (num == 0) { break; } } } } return; IL_247: throw new NullReferenceException(); IL_253: throw new NullReferenceException(); IL_26B: throw new NullReferenceException(); } // Token: 0x0600953C RID: 38204 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x600953C")] [Address(RVA = "0x1C41D80", Offset = "0x1C40B80", VA = "0x181C41D80", Slot = "8")] void IProtocol.HandleEvents() { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x0600953D RID: 38205 RVA: 0x001EB6B4 File Offset: 0x001E98B4 [Token(Token = "0x600953D")] [Address(RVA = "0x1C419D0", Offset = "0x1C407D0", VA = "0x181C419D0", Slot = "6")] void IHeartbeat.OnHeartbeatUpdate(TimeSpan dif) { DateTime utcNow = DateTime.UtcNow; DateTime dateTime = this.lastPing; TimeSpan timeSpan = utcNow - dateTime; TimeSpan timeSpan2 = this.k__BackingField; if (timeSpan >= timeSpan2) { this.SendPing(); } DateTime dateTime2 = this.lastMessage; TimeSpan timeSpan3 = this.k__BackingField; DateTime dateTime3 = dateTime2 + timeSpan3; TimeSpan timeSpan4 = utcNow - dateTime3; TimeSpan k__BackingField = this.k__BackingField.k__BackingField; if (timeSpan4 > k__BackingField) { ILogger logger = HTTPManager.Logger; object[] array = new object[4]; DateTime dateTime4 = this.lastMessage; if (array != 0) { } array[0] = array; TimeSpan timeSpan5 = this.k__BackingField; if (timeSpan5 != 0) { } array[1] = timeSpan5; TimeSpan k__BackingField2 = this.k__BackingField.k__BackingField; if (k__BackingField2 != 0) { } array[2] = k__BackingField2; if (k__BackingField2 != 0) { } array[3] = k__BackingField2; string text = string.Format("No message received in the given time! Closing WebSocket. LastMessage: {0}, PingFrequency: {1}, Close After: {2}, Now: {3}", array); this.CloseWithError("No message received in the given time!"); } } // Token: 0x0600953E RID: 38206 RVA: 0x001EB7BC File Offset: 0x001E99BC [Token(Token = "0x600953E")] [Address(RVA = "0x1C429C0", Offset = "0x1C417C0", VA = "0x181C429C0")] private void OnApplicationForegroundStateChanged(bool isPaused) { if (!isPaused) { DateTime utcNow = DateTime.UtcNow; this.lastMessage = utcNow; } } // Token: 0x0600953F RID: 38207 RVA: 0x001EB7DC File Offset: 0x001E99DC [Token(Token = "0x600953F")] [Address(RVA = "0x1C435D0", Offset = "0x1C423D0", VA = "0x181C435D0")] private void SendPing() { DateTime utcNow = DateTime.UtcNow; this.lastPing = utcNow; DateTime utcNow2 = DateTime.UtcNow; byte[] array; ulong num; int num2; ulong num3; ulong num4; WebSocketFrame webSocketFrame = new WebSocketFrame(this.k__BackingField, (WebSocketFrameTypes)((ulong)9L), array, num, (ulong)num2, num3 != 0UL, num4 != 0UL); if (array != 0) { } num2 = 0; this.Insert(webSocketFrame); ILogger logger = HTTPManager.Logger; } // Token: 0x06009540 RID: 38208 RVA: 0x001EB844 File Offset: 0x001E9A44 [Token(Token = "0x6009540")] [Address(RVA = "0x1C423E0", Offset = "0x1C411E0", VA = "0x181C423E0")] private void CloseWithError(string message) { Delegate @delegate; int num; do { HTTPRequest baseRequest = this.baseRequest; Exception ex = new Exception(message); baseRequest.k__BackingField = ex; this.baseRequest.k__BackingField = (HTTPRequestStates)((ulong)4L); this.closed = true; HTTPManager.Heartbeats.Unsubscribe(this); Action onApplicationForegroundStateChanged = HTTPUpdateDelegator.OnApplicationForegroundStateChanged; Action action = new Action(this.OnApplicationForegroundStateChanged); @delegate = Delegate.Remove(onApplicationForegroundStateChanged, action); num = 0; } while (@delegate != 0 && @delegate == 0); HTTPUpdateDelegator.OnApplicationForegroundStateChanged = num; bool flag = this.newFrameSignal.Set(); this.CloseStream(); } // Token: 0x06009541 RID: 38209 RVA: 0x001EB8D4 File Offset: 0x001E9AD4 [Token(Token = "0x6009541")] [Address(RVA = "0x1C422A0", Offset = "0x1C410A0", VA = "0x181C422A0")] private int CalculateLatency() { CircularBuffer circularBuffer = this.rtts; int num = 0; int num2 = circularBuffer[num]; num += num2; num++; CircularBuffer circularBuffer2 = this.rtts; return num; } // Token: 0x040065B0 RID: 26032 [Token(Token = "0x40065B0")] public static int RTTBufferCapacity; // Token: 0x040065B2 RID: 26034 [FieldOffset(Offset = "0xE0")] [Token(Token = "0x40065B2")] public Action OnText; // Token: 0x040065B3 RID: 26035 [FieldOffset(Offset = "0xE8")] [Token(Token = "0x40065B3")] public Action OnBinary; // Token: 0x040065B4 RID: 26036 [FieldOffset(Offset = "0xF0")] [Token(Token = "0x40065B4")] public Action OnIncompleteFrame; // Token: 0x040065B5 RID: 26037 [FieldOffset(Offset = "0xF8")] [Token(Token = "0x40065B5")] public Action OnClosed; // Token: 0x040065B8 RID: 26040 [FieldOffset(Offset = "0x10C")] [Token(Token = "0x40065B8")] private int _bufferedAmount; // Token: 0x040065BA RID: 26042 [FieldOffset(Offset = "0x118")] [Token(Token = "0x40065BA")] private List IncompleteFrames; // Token: 0x040065BB RID: 26043 [FieldOffset(Offset = "0x120")] [Token(Token = "0x40065BB")] private List CompletedFrames; // Token: 0x040065BC RID: 26044 [FieldOffset(Offset = "0x128")] [Token(Token = "0x40065BC")] private List frameCache; // Token: 0x040065BD RID: 26045 [FieldOffset(Offset = "0x130")] [Token(Token = "0x40065BD")] private WebSocketFrameReader CloseFrame; // Token: 0x040065BE RID: 26046 [FieldOffset(Offset = "0x150")] [Token(Token = "0x40065BE")] private object FrameLock; // Token: 0x040065BF RID: 26047 [FieldOffset(Offset = "0x158")] [Token(Token = "0x40065BF")] private object SendLock; // Token: 0x040065C0 RID: 26048 [FieldOffset(Offset = "0x160")] [Token(Token = "0x40065C0")] private List unsentFrames; // Token: 0x040065C1 RID: 26049 [FieldOffset(Offset = "0x168")] [Token(Token = "0x40065C1")] private AutoResetEvent newFrameSignal; // Token: 0x040065C2 RID: 26050 [FieldOffset(Offset = "0x170")] [Token(Token = "0x40065C2")] private bool sendThreadCreated; // Token: 0x040065C3 RID: 26051 [FieldOffset(Offset = "0x171")] [Token(Token = "0x40065C3")] private bool closeSent; // Token: 0x040065C4 RID: 26052 [FieldOffset(Offset = "0x172")] [Token(Token = "0x40065C4")] private bool closed; // Token: 0x040065C5 RID: 26053 [FieldOffset(Offset = "0x178")] [Token(Token = "0x40065C5")] private DateTime lastPing; // Token: 0x040065C6 RID: 26054 [FieldOffset(Offset = "0x180")] [Token(Token = "0x40065C6")] private DateTime lastMessage; // Token: 0x040065C7 RID: 26055 [FieldOffset(Offset = "0x188")] [Token(Token = "0x40065C7")] private CircularBuffer rtts; } }