Пример #1
0
        public EngineIOClient Close()
        {
            if (ReadyState == EngineIOReadyState.OPENING || ReadyState == EngineIOReadyState.OPEN)
            {
                ReadyState = EngineIOReadyState.CLOSING;

                void Close()
                {
                    this.OnClose("Forced close");
                    Transport.Close();
                }

                void CleanUpAndClose()
                {
                    Off(Event.UPGRADE, CleanUpAndClose);
                    Off(Event.UPGRADE_ERROR, CleanUpAndClose);

                    Close();
                }

                void OnClose()
                {
                    if (Upgrading)
                    {
                        Once(Event.UPGRADE, CleanUpAndClose);
                        Once(Event.UPGRADE_ERROR, CleanUpAndClose);
                    }
                    else
                    {
                        Close();
                    }
                }

                if (PacketBuffer.Count > 0)
                {
                    Once(Event.DRAIN, OnClose);
                }
                else
                {
                    OnClose();
                }
            }

            return(this);
        }
Пример #2
0
        private void OnClose(string Message, Exception Description = null)
        {
            if (ReadyState != EngineIOReadyState.CLOSED)
            {
                StopHeartbeat();

                Transport.Off(EngineIOTransport.Event.CLOSE);
                Transport.Close();
                Transport.Off();

                ReadyState = EngineIOReadyState.CLOSED;
                Handshake  = null;

                Emit(Event.CLOSE, new EngineIOException(Message, Description));

                PacketBuffer.Clear();
                PreviousBufferSize = 0;
            }
        }
Пример #3
0
        private void OnOpen()
        {
            ReadyState            = EngineIOReadyState.OPEN;
            PriorWebsocketSuccess = Transport is EngineIOWebSocket;

            Emit(Event.OPEN);
            Flush();

            if (ReadyState == EngineIOReadyState.OPEN && Option.Upgrade && Option.WebSocket && Transport is EngineIOPolling)
            {
                foreach (string Upgrade in Handshake.Upgrades)
                {
                    if (EngineIOHttpManager.IsWebSocket(Upgrade))
                    {
                        Probe();
                        break;
                    }
                }
            }
        }
Пример #4
0
        public EngineIOClient Connect()
        {
            if (ReadyState == EngineIOReadyState.CLOSED)
            {
                EngineIOTransport Transport;
                ReadyState = EngineIOReadyState.OPENING;

                if (Option.WebSocket && (!Option.Polling || (Option.RemeberUpgrade && PriorWebsocketSuccess)))
                {
                    Transport = new EngineIOWebSocket(Option);
                }
                else
                {
                    Transport = new EngineIOPolling(Option);
                }

                SetTransport(Transport);
            }

            return(this);
        }
Пример #5
0
 public EngineIOClient(EngineIOClientOption Option)
 {
     this.Option = Option;
     ReadyState  = EngineIOReadyState.CLOSED;
 }