public override Task DisconnectAsync(CancellationToken cancellationToken) { _pollingTokenSource.Cancel(); if (PingTokenSource != null) { PingTokenSource.Cancel(); } return(Task.CompletedTask); }
public virtual void Dispose() { MessageSubject.Dispose(); _messageQueue.Clear(); if (PingTokenSource != null) { PingTokenSource.Cancel(); PingTokenSource.Dispose(); } }
public void OnNext(string text) { _logger.LogDebug($"[Receive] {text}"); var msg = MessageFactory.CreateMessage(Options.EIO, text); if (msg == null) { return; } if (msg.BinaryCount > 0) { msg.IncomingBytes = new List <byte[]>(msg.BinaryCount); _messageQueue.Enqueue(msg); return; } if (msg.Type == MessageType.Opened) { OpenAsync(msg as OpenedMessage).ConfigureAwait(false); } if (Options.EIO == 3) { if (msg.Type == MessageType.Connected) { var connectMsg = msg as ConnectedMessage; connectMsg.Sid = OpenedMessage.Sid; if ((string.IsNullOrEmpty(Namespace) && string.IsNullOrEmpty(connectMsg.Namespace)) || connectMsg.Namespace == Namespace) { if (PingTokenSource != null) { PingTokenSource.Cancel(); } PingTokenSource = new CancellationTokenSource(); StartPing(PingTokenSource.Token); } else { return; } } else if (msg.Type == MessageType.Pong) { var pong = msg as PongMessage; pong.Duration = DateTime.Now - _pingTime; } } MessageSubject.OnNext(msg); if (msg.Type == MessageType.Ping) { _pingTime = DateTime.Now; try { SendAsync(new PongMessage(), CancellationToken.None).ConfigureAwait(false); MessageSubject.OnNext(new PongMessage { Eio = Options.EIO, Protocol = Options.Transport, Duration = DateTime.Now - _pingTime }); } catch (Exception e) { OnError(e); } } }