Esempio n. 1
0
        private void close(CloseEventArgs e, bool send, bool wait)
        {
            lock (_forConn) {
            if (_readyState == WebSocketState.Closing || _readyState == WebSocketState.Closed) {
              _logger.Info ("Closing the connection has already been done.");
              return;
            }

            send = send && _readyState == WebSocketState.Open;
            wait = wait && send;

            _readyState = WebSocketState.Closing;
              }

              _logger.Trace ("Begin closing the connection.");

              e.WasClean = closeHandshake (
            send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, _client).ToByteArray () : null,
            wait ? _waitTime : TimeSpan.Zero,
            _client ? (Action) releaseClientResources : releaseServerResources);

              _logger.Trace ("End closing the connection.");

              _readyState = WebSocketState.Closed;
              try {
            OnClose.Emit (this, e);
              }
              catch (Exception ex) {
            _logger.Fatal (ex.ToString ());
            error ("An exception has occurred during an OnClose event.", ex);
              }
        }
Esempio n. 2
0
 private void closeAsync(CloseEventArgs e, bool send, bool wait)
 {
     Action<CloseEventArgs, bool, bool> closer = close;
       closer.BeginInvoke (e, send, wait, ar => closer.EndInvoke (ar), null);
 }
Esempio n. 3
0
        // As server
        internal void Close(CloseEventArgs e, byte[] frameAsBytes, TimeSpan timeout)
        {
            lock (_forConn) {
            if (_readyState == WebSocketState.Closing || _readyState == WebSocketState.Closed) {
              _logger.Info ("Closing the connection has already been done.");
              return;
            }

            _readyState = WebSocketState.Closing;
              }

              e.WasClean = closeHandshake (frameAsBytes, timeout, releaseServerResources);

              _readyState = WebSocketState.Closed;
              try {
            OnClose.Emit (this, e);
              }
              catch (Exception ex) {
            _logger.Fatal (ex.ToString ());
              }
        }