Esempio n. 1
0
 protected override void OnCloseConnection(WebSocketCloseReason aReason)
 {
     if (close != null)
     {
         close(this, aReason);
     }
 }
Esempio n. 2
0
 /// <summary>
 /// 引发关闭完成事件
 /// </summary>
 /// <param name="reason"></param>
 protected void OnClosed(WebSocketCloseReason reason)
 {
     if (this.Closed != null)
     {
         this.Closed(this, new WebSocketCloseEventArgs(reason));
     }
 }
Esempio n. 3
0
 protected virtual void OnCloseConnection(WebSocketCloseReason aReason)
 {
     if (close != null)
     {
         close(this, aReason);
     }
 }
Esempio n. 4
0
 public void ProcessOnClose(WebSocketCloseReason aCloseReason)
 {
     Deployment.Current.Dispatcher.BeginInvoke(() =>
     {
         StatusList.Items.Add("Disconnected!");
         PingBtn.IsEnabled       = false;
         DisconnectBtn.IsEnabled = false;
         Echo.IsEnabled          = false;
     });
 }
Esempio n. 5
0
        public async Task CloseAsync(WebSocketCloseReason reason)
        {
            if (Interlocked.CompareExchange(ref this.closeState, WS_STATE_CLOSE_SENT, WS_STATE_OPEN) != WS_STATE_OPEN &&
                Interlocked.CompareExchange(ref this.closeState, WS_STATE_CLOSED, WS_STATE_CLOSE_RECEIVED) != WS_STATE_CLOSE_RECEIVED)
            {
                return;
            }

            if (this.log.IsDebugEnabled)
            {
                this.log.Debug($"A close is called on websocket. Switching state to '{(this.closeState == WS_STATE_CLOSE_SENT ? "CloseSent" : "Closed")}'.");
            }

            await this.writeSemaphore.WaitAsync().ConfigureAwait(false);

            try
            {
                EndianBitConverter.UInt16CopyBytesBe((ushort)reason, this.outCloseBuffer.Array, this.outCloseBuffer.Offset);
                var messageType = (WebSocketMessageType)WebSocketFrameOption.ConnectionClose;
                var closeFrame  = this.PrepareFrame(this.outCloseBuffer, 2, true, false, messageType, WebSocketExtensionFlags.None);

                await this.SendFrameAsync(closeFrame, Timeout.InfiniteTimeSpan, SendOptions.NoLock | SendOptions.NoErrors | SendOptions.IgnoreClose, CancellationToken.None).ConfigureAwait(false);

                await this.networkConnection.FlushAsync(CancellationToken.None).ConfigureAwait(false);

                if (this.closeState >= WS_STATE_CLOSED)
                {
                    await this.networkConnection.CloseAsync().ConfigureAwait(false);
                }
            }
            catch (Exception closeError) when(closeError.Unwrap() is ThreadAbortException == false)
            {
                var closeErrorUnwrap = closeError.Unwrap();

                if (closeErrorUnwrap is IOException || closeErrorUnwrap is OperationCanceledException || closeErrorUnwrap is InvalidOperationException)
                {
                    return; // ignore common IO exceptions while closing connection
                }
                if (this.log.IsDebugEnabled)
                {
                    this.log.Debug($"({this.GetHashCode():X}) An error occurred while closing connection.", closeError.Unwrap());
                }
            }
            finally
            {
                SafeEnd.ReleaseSemaphore(this.writeSemaphore, this.log);
            }
        }
Esempio n. 6
0
 /// <summary>
 /// 关闭连接
 /// </summary>
 protected void Close(WebSocketCloseReason reason)
 {
     lock (this.sendLockObject)
     {
         if (this.isConnectioned == true)
         {
             this.isConnectioned = false;
             if (reason == WebSocketCloseReason.Close)
             {
                 this.autoConnect = false;
             }
             this.stream.Close();
             this.socket.Close();
             //
             this.OnClosed(reason);
         }
     }
 }
Esempio n. 7
0
        private void StopIt()
        {
            mIsRunning = false;
            mStatus    = WebSocketStatus.CLOSED;
            mCLose     = WebSocketCloseReason.CLIENT;

            try
            {
                mNetStream.Close();
                mHeaders.GetRequestFields.Clear();
                mHeaders.GetResponseFields.Clear();
            }
            catch (IOException lIOEx)
            {
                if (mLog.IsErrorEnabled)
                {
                    mLog.Error(lIOEx.Message);
                }
                OnError(new WebSocketError(lIOEx.Message));
                throw new WebSocketException(lIOEx.Message);
            }
        }
Esempio n. 8
0
        /// <summary>
        /// 关闭当前连接
        /// </summary>
        /// <param name="reason"></param>
        /// <param name="message"></param>
        protected void Close(string message, WebSocketCloseReason reason)
        {
            var trigger = false;

            lock (this)
            {
                if (this.isClosed == false)
                {
                    this.socket.Close();

                    this.closeMessage = message;

                    trigger = true;

                    this.isClosed = true;
                }
            }
            if (trigger)
            {
                this.Server.OnWebSocketDisconnected(this);
            }
        }
Esempio n. 9
0
 /// <summary>
 /// 初始化新实例
 /// </summary>
 /// <param name="reason"></param>
 public WebSocketCloseEventArgs(WebSocketCloseReason reason)
 {
     this.Reason = reason;
 }
Esempio n. 10
0
        private void ProcessHybi()
        {
            WebSocketFrameType lFrameType;
            IWebSocketPacket   lPacket;

            while (mIsRunning)
            {
                try
                {
                    lPacket = WebSocketProtocolAbstraction.protocolToRawPacket(mNetStream);
                    Console.WriteLine(lPacket.GetString());
                    lFrameType = (lPacket != null ? lPacket.FrameType : WebSocketFrameType.INVALID);

                    if (lFrameType.Equals(null))
                    {
                        if (mLog.IsErrorEnabled)
                        {
                            mLog.Error(WebSocketMessage.NULL_FRAME_TYPE);
                        }
                        mIsRunning = false;
                        mCLose     = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.NULL_FRAME_TYPE, mCLose));
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.INVALID))
                    {
                        if (mLog.IsErrorEnabled)
                        {
                            mLog.Error(WebSocketMessage.INVALID_HYBI_FRAME);
                        }
                        mIsRunning = false;
                        mCLose     = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.INVALID_HYBI_FRAME, mCLose));
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.CLOSE))
                    {
                        if (mLog.IsInfoEnabled)
                        {
                            mLog.Info(WebSocketMessage.CLOSE_FRAME_TYPE);
                        }
                        mIsRunning = false;
                        mCLose     = WebSocketCloseReason.CLIENT;

                        StopIt();
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.PONG))
                    {
                        OnRecivePong();
                        if (WebSocketStateOfStatus.isWritable(mStatus))
                        {
                            if (mLog.IsInfoEnabled)
                            {
                                mLog.Info(WebSocketMessage.PING_PACKET_SENDING);
                            }
                            Ping();
                            OnSendPing();
                        }
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.BINARY))
                    {
                        if (mLog.IsInfoEnabled)
                        {
                            mLog.Info(WebSocketMessage.BINARY_PACKET_RECEIVED);
                        }
                        //****TODO****
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.TEXT))
                    {
                        if (mLog.IsInfoEnabled)
                        {
                            mLog.Info(WebSocketMessage.TEXT_PACKET_RECEIVED);
                        }
                        OnReciveTextPacket(this, lPacket);
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.FRAGMENT))
                    {
                        if (mLog.IsInfoEnabled)
                        {
                            mLog.Info(WebSocketMessage.FRAGMENT_PACKET_RECEIVED);
                        }
                        //****TODO****
                    }
                }
                catch (Exception lEx)
                {
                    mIsRunning = false;
                    if (mStatus.Equals(WebSocketStatus.CLOSED))
                    {
                        mCLose = WebSocketCloseReason.CLIENT;
                    }
                    else
                    {
                        mCLose = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.ERROR_HYBI_PROCESSOR, mCLose));
                        if (mLog.IsErrorEnabled)
                        {
                            mLog.Error(WebSocketMessage.ERROR_HYBI_PROCESSOR
                                       + WebSocketMessage.SEPARATOR + lEx.Message);
                        }
                    }
                }
            }
        }
Esempio n. 11
0
        public void Open(string aURI, string aSubProtocol, int aTimeout, int aVersion)
        {
            try
            {
                if (mLog.IsDebugEnabled)
                {
                    mLog.Debug(WebSocketMessage.ESTABLiSHING_CONNECTION + WebSocketMessage.SEPARATOR
                               + WebSocketMessage.URL + aURI + WebSocketMessage.SEPARATOR + WebSocketMessage.SUBPROTOCOL
                               + aSubProtocol + WebSocketMessage.SEPARATOR + WebSocketMessage.TIMEOUT
                               + aTimeout + WebSocketMessage.SEPARATOR + WebSocketMessage.VERSION + aVersion);
                }

                mStatus = WebSocketStatus.OPENING;

                mVersion = aVersion;
                mURI     = new Uri(aURI);

                WebSocketHandshake lHandshake = new WebSocketHandshake(mURI, aSubProtocol, mVersion, mCookieManage);

                if (mSocket != null && mSocket.Connected)
                {
                    mSocket.Close();
                }
                CreateSocket();

                byte[] sendBuffer = lHandshake.GenerateC2SRequest();
                mNetStream.Write(sendBuffer, 0, sendBuffer.Length);
                mNetStream.Flush();

                mStatus = WebSocketStatus.CONNECTING;

                mHeaders.ReadRequestFromBuffer(sendBuffer);
                if (mLog.IsDebugEnabled)
                {
                    mLog.Debug(WebSocketMessage.SENDING_HANDSHAKE + mHeaders.ToStringRequest());
                }

                WebSocketTimeout.CallWithTimeout(mHeaders.ReadResponseFromStream, aTimeout, mNetStream);

                mCookieManage.AddCookies(mHeaders.GetCookies, mURI);

                if (mLog.IsDebugEnabled)
                {
                    mLog.Debug(WebSocketMessage.RECEIVING_HANDSHAKE + mHeaders.ToStringResponse());
                }

                lHandshake.VerifyS2CResponse(mHeaders);

                string lProtocol = GetResponseHeaderField(WebSocketConstants.SEC_WEBSOCKET_PROTOCOL);

                if (lProtocol != null)
                {
                    mNegotiatedSubProtocol = new WebSocketSubProtocol(lProtocol, mEncoding);
                }
                else
                {
                    mNegotiatedSubProtocol = new WebSocketSubProtocol(WebSocketConstants.WS_SUBPROT_DEFAULT,
                                                                      WebSocketConstants.WS_ENCODING_DEFAULT);
                }

                Thread lReciver = new Thread(new ThreadStart(Receiver));
                lReciver.Start();

                if (mLog.IsInfoEnabled)
                {
                    mLog.Info(WebSocketMessage.CONNECTION_HAS_BEEN_ESTABLISHED);
                }

                mStatus    = WebSocketStatus.OPENED;
                mIsRunning = true;
                OnOpenConnection(mHeaders);
            }
            catch (TimeoutException lTe)
            {
                if (mLog.IsErrorEnabled)
                {
                    mLog.Error(WebSocketMessage.EXCEEDED_FOR_CONNECTION + WebSocketMessage.SEPARATOR
                               + WebSocketMessage.DETAILS + lTe.Message);
                }
                mCLose = WebSocketCloseReason.TIMEOUT;
                OnCloseConnection(mCLose);
                OnError(new WebSocketError(WebSocketMessage.TIMEOUT + WebSocketMessage.EXCEEDED_FOR_CONNECTION, mCLose));
                CheckReconnect();
            }
            catch (Exception lEx)
            {
                if (mLog.IsErrorEnabled)
                {
                    mLog.Error(WebSocketMessage.NOT_ESTABLISH_CONNECTION + WebSocketMessage.SEPARATOR
                               + WebSocketMessage.DETAILS + lEx.Message);
                }
                mCLose = WebSocketCloseReason.BROKEN;
                OnCloseConnection(mCLose);
                OnError(new WebSocketError(WebSocketMessage.NOT_ESTABLISH_CONNECTION, mCLose));
                CheckReconnect();
            }
        }
Esempio n. 12
0
 private void Close(WebSocketTokenClient sender, WebSocketCloseReason e)
 {
     gb_send.Enabled = false;
     listBox1.Items.Add("Connection Closed : " + e.ToString());
 }
Esempio n. 13
0
 public abstract Task CloseAsync(WebSocketCloseReason closeCode);
Esempio n. 14
0
        public void Open(string aURI, string aSubProtocol, int aTimeout, int aVersion)
        {
            try
            {
                if (mLog.IsDebugEnabled)
                    mLog.Debug(WebSocketMessage.ESTABLiSHING_CONNECTION + WebSocketMessage.SEPARATOR
                        + WebSocketMessage.URL + aURI + WebSocketMessage.SEPARATOR + WebSocketMessage.SUBPROTOCOL
                        + aSubProtocol + WebSocketMessage.SEPARATOR + WebSocketMessage.TIMEOUT
                        + aTimeout + WebSocketMessage.SEPARATOR + WebSocketMessage.VERSION + aVersion);

                mStatus = WebSocketStatus.OPENING;

                mVersion = aVersion;
                mURI = new Uri(aURI);

                WebSocketHandshake lHandshake = new WebSocketHandshake(mURI, aSubProtocol, mVersion,mCookieManage);

                if (mSocket != null && mSocket.Connected)
                    mSocket.Close();
                 CreateSocket();

                byte[] sendBuffer = lHandshake.GenerateC2SRequest();
                mNetStream.Write(sendBuffer, 0, sendBuffer.Length);
                mNetStream.Flush();

                mStatus = WebSocketStatus.CONNECTING;

                mHeaders.ReadRequestFromBuffer(sendBuffer);
                if (mLog.IsDebugEnabled)
                    mLog.Debug(WebSocketMessage.SENDING_HANDSHAKE + mHeaders.ToStringRequest());

                WebSocketTimeout.CallWithTimeout(mHeaders.ReadResponseFromStream, aTimeout, mNetStream);

                mCookieManage.AddCookies(mHeaders.GetCookies, mURI);

                if (mLog.IsDebugEnabled)
                    mLog.Debug(WebSocketMessage.RECEIVING_HANDSHAKE + mHeaders.ToStringResponse());

                lHandshake.VerifyS2CResponse(mHeaders);

                string lProtocol = GetResponseHeaderField(WebSocketConstants.SEC_WEBSOCKET_PROTOCOL);

                if (lProtocol != null)
                    mNegotiatedSubProtocol = new WebSocketSubProtocol(lProtocol, mEncoding);
                else
                    mNegotiatedSubProtocol = new WebSocketSubProtocol(WebSocketConstants.WS_SUBPROT_DEFAULT,
                        WebSocketConstants.WS_ENCODING_DEFAULT);

                Thread lReciver = new Thread(new ThreadStart(Receiver));
                lReciver.Start();

                if (mLog.IsInfoEnabled)
                    mLog.Info(WebSocketMessage.CONNECTION_HAS_BEEN_ESTABLISHED);

                mStatus = WebSocketStatus.OPENED;
                mIsRunning = true;
                OnOpenConnection(mHeaders);
            }
            catch (TimeoutException lTe)
            {
                if (mLog.IsErrorEnabled)
                    mLog.Error(WebSocketMessage.EXCEEDED_FOR_CONNECTION + WebSocketMessage.SEPARATOR
                        + WebSocketMessage.DETAILS + lTe.Message);
                mCLose = WebSocketCloseReason.TIMEOUT;
                OnCloseConnection(mCLose);
                OnError(new WebSocketError(WebSocketMessage.TIMEOUT + WebSocketMessage.EXCEEDED_FOR_CONNECTION, mCLose));
                CheckReconnect();
            }
            catch (Exception lEx)
            {
                if (mLog.IsErrorEnabled)
                    mLog.Error(WebSocketMessage.NOT_ESTABLISH_CONNECTION + WebSocketMessage.SEPARATOR
                        + WebSocketMessage.DETAILS + lEx.Message);
                mCLose = WebSocketCloseReason.BROKEN;
                OnCloseConnection(mCLose);
                OnError(new WebSocketError(WebSocketMessage.NOT_ESTABLISH_CONNECTION, mCLose));
                CheckReconnect();
            }
        }
 public override Task CloseAsync(WebSocketCloseReason closeReason)
 {
     return(this.Connection.CloseAsync(closeReason));
 }
Esempio n. 16
0
 private void Close(WebSocketTokenClient sender, WebSocketCloseReason e)
 {
     gb_send.Enabled = false;
     listBox1.Items.Add("Connection Closed : " + e.ToString());
 }
 public void OnWebSocketClosed(DateTime timestamp, DateTime establishedTime, WebSocketCloseReason closeReason, long messagesRead, long messagesWritten)
 {
     Telemetry = new WebSocketsTelemetry(timestamp, establishedTime, closeReason, messagesRead, messagesWritten);
 }
Esempio n. 18
0
 public WebSocketError(string aReason, WebSocketCloseReason aCloseReason)
 {
     mReason = aReason;
     mCloseReason = aCloseReason;
 }
Esempio n. 19
0
        private void StopIt()
        {
            mIsRunning = false;
            mStatus = WebSocketStatus.CLOSED;
            mCLose = WebSocketCloseReason.CLIENT;

            try
            {
                mNetStream.Close();
                mHeaders.GetRequestFields.Clear();
                mHeaders.GetResponseFields.Clear();
            }
            catch (IOException lIOEx)
            {
                if (mLog.IsErrorEnabled)
                    mLog.Error(lIOEx.Message);
                OnError(new WebSocketError(lIOEx.Message));
                throw new WebSocketException(lIOEx.Message);
            }
        }
Esempio n. 20
0
        private void ProcessHybi()
        {
            WebSocketFrameType lFrameType;
            IWebSocketPacket lPacket;

            while (mIsRunning)
            {
                try
                {
                    lPacket = WebSocketProtocolAbstraction.protocolToRawPacket(mNetStream);
                    Console.WriteLine(lPacket.GetString());
                    lFrameType = (lPacket != null ? lPacket.FrameType : WebSocketFrameType.INVALID);

                    if (lFrameType.Equals(null))
                    {
                        if (mLog.IsErrorEnabled)
                            mLog.Error(WebSocketMessage.NULL_FRAME_TYPE);
                        mIsRunning = false;
                        mCLose = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.NULL_FRAME_TYPE, mCLose));
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.INVALID))
                    {
                        if (mLog.IsErrorEnabled)
                            mLog.Error(WebSocketMessage.INVALID_HYBI_FRAME);
                        mIsRunning = false;
                        mCLose = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.INVALID_HYBI_FRAME, mCLose));
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.CLOSE))
                    {
                        if (mLog.IsInfoEnabled)
                            mLog.Info(WebSocketMessage.CLOSE_FRAME_TYPE);
                        mIsRunning = false;
                        mCLose = WebSocketCloseReason.CLIENT;

                        StopIt();
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.PONG))
                    {
                        OnRecivePong();
                        if (WebSocketStateOfStatus.isWritable(mStatus))
                        {
                            if (mLog.IsInfoEnabled)
                                mLog.Info(WebSocketMessage.PING_PACKET_SENDING);
                            Ping();
                            OnSendPing();
                        }
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.BINARY))
                    {
                        if (mLog.IsInfoEnabled)
                            mLog.Info(WebSocketMessage.BINARY_PACKET_RECEIVED);
                        //****TODO****
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.TEXT))
                    {
                        if (mLog.IsInfoEnabled)
                            mLog.Info(WebSocketMessage.TEXT_PACKET_RECEIVED);
                        OnReciveTextPacket(this, lPacket);
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.FRAGMENT))
                    {
                        if (mLog.IsInfoEnabled)
                            mLog.Info(WebSocketMessage.FRAGMENT_PACKET_RECEIVED);
                        //****TODO****
                    }
                }
                catch (Exception lEx)
                {
                    mIsRunning = false;
                    if (mStatus.Equals(WebSocketStatus.CLOSED))
                        mCLose = WebSocketCloseReason.CLIENT;
                    else
                    {
                        mCLose = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.ERROR_HYBI_PROCESSOR, mCLose));
                        if (mLog.IsErrorEnabled)
                            mLog.Error(WebSocketMessage.ERROR_HYBI_PROCESSOR
                                + WebSocketMessage.SEPARATOR + lEx.Message);
                    }
                }
            }
        }
Esempio n. 21
0
 protected virtual void OnCloseConnection(WebSocketCloseReason aReason)
 {
     if (close != null)
         close(this, aReason);
 }
Esempio n. 22
0
 protected override void OnCloseConnection(WebSocketCloseReason aReason)
 {
     if (close != null)
         close(this, aReason);
 }
 public void OnWebSocketClosed(DateTime timestamp, DateTime establishedTime, WebSocketCloseReason closeReason, long messagesRead, long messagesWritten)
 {
     _logger.LogInformation($"WebSocket connection closed ({closeReason}) after reading {messagesRead} and writing {messagesWritten} messages over {(timestamp - establishedTime).TotalSeconds:N2} seconds.");
 }
Esempio n. 24
0
 public WebSocketError(string aReason, WebSocketCloseReason aCloseReason)
 {
     mReason      = aReason;
     mCloseReason = aCloseReason;
 }