Example #1
0
 public override Task DisconnectAsync(CancellationToken cancellationToken)
 {
     _pollingTokenSource.Cancel();
     if (PingTokenSource != null)
     {
         PingTokenSource.Cancel();
     }
     return(Task.CompletedTask);
 }
Example #2
0
 public virtual void Dispose()
 {
     MessageSubject.Dispose();
     _messageQueue.Clear();
     if (PingTokenSource != null)
     {
         PingTokenSource.Cancel();
         PingTokenSource.Dispose();
     }
 }
Example #3
0
        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);
                }
            }
        }