コード例 #1
0
        internal void Stop(CloseEventArgs e, bool send, bool receive)
        {
            byte[] array;
            object obj = this._sync;

            Monitor.Enter(obj);
            try
            {
                this._state = ServerState.ShuttingDown;
                if (send)
                {
                    array = WebSocketFrame.CreateCloseFrame(e.PayloadData, false).ToArray();
                }
                else
                {
                    array = null;
                }
                byte[] numArray = array;
                foreach (WebSocketServiceHost value in this._hosts.Values)
                {
                    value.Sessions.Stop(e, numArray, receive);
                }
                this._hosts.Clear();
                this._state = ServerState.Stop;
            }
            finally
            {
                Monitor.Exit(obj);
            }
        }
コード例 #2
0
        internal void Stop(ushort code, string reason)
        {
            CloseEventArgs e       = new CloseEventArgs(code, reason);
            bool           receive = !code.IsReserved();

            this.Sessions.Stop(e, !receive ? null : WebSocketFrame.CreateCloseFrame(e.PayloadData, false).ToArray(), receive);
        }
コード例 #3
0
        internal void Stop(ushort code, string reason)
        {
            var e     = new CloseEventArgs(code, reason);
            var send  = !code.IsReserved();
            var bytes = send ? WebSocketFrame.CreateCloseFrame(e.PayloadData, false).ToArray() : null;

            Sessions.Stop(e, bytes, send);
        }
コード例 #4
0
        internal void Stop(byte [] data, bool send)
        {
            var payload      = new PayloadData(data);
            var args         = new CloseEventArgs(payload);
            var frameAsBytes =
                send ? WebSocketFrame.CreateCloseFrame(Mask.Unmask, payload).ToByteArray() : null;

            Stop(args, frameAsBytes);
        }
コード例 #5
0
        internal void Stop(ushort code, string reason)
        {
            CloseEventArgs closeEventArgs = new CloseEventArgs(code, reason);
            bool           flag           = !code.IsReserved();

            byte[]   frameAsBytes = ((!flag) ? null : WebSocketFrame.CreateCloseFrame(closeEventArgs.PayloadData, mask: false).ToByteArray());
            TimeSpan timeout      = ((!flag) ? TimeSpan.Zero : WaitTime);

            Sessions.Stop(closeEventArgs, frameAsBytes, timeout);
        }
コード例 #6
0
        internal async Task Stop(ushort code, string reason)
        {
            var e = new CloseEventArgs(code, reason);

            var send  = !code.IsReserved();
            var bytes =
                send ? await WebSocketFrame.CreateCloseFrame(e.PayloadData, false).ToByteArray().ConfigureAwait(false) : null;

            var timeout = send ? WaitTime : TimeSpan.Zero;
            await Sessions.Stop(e, bytes, timeout).ConfigureAwait(false);
        }
コード例 #7
0
        internal async Task Stop(CloseEventArgs e, bool send, bool wait)
        {
            _state = ServerState.ShuttingDown;

            var bytes =
                send ? await WebSocketFrame.CreateCloseFrame(e.PayloadData, false).ToByteArray().ConfigureAwait(false) : null;

            var timeout = wait ? _waitTime : TimeSpan.Zero;
            var tasks   = _hosts.Values.ToArray().Select(host => host.Sessions.Stop(e, bytes, timeout));
            await Task.WhenAll(tasks).ConfigureAwait(false);

            _hosts.Clear();
            _state = ServerState.Stop;
        }
コード例 #8
0
        internal void Stop(CloseEventArgs e, bool send, bool receive)
        {
            lock (_sync) {
                _state = ServerState.ShuttingDown;

                var bytes = send ? WebSocketFrame.CreateCloseFrame(e.PayloadData, false).ToArray() : null;
                foreach (var host in _hosts.Values)
                {
                    host.Sessions.Stop(e, bytes, receive);
                }

                _hosts.Clear();
                _state = ServerState.Stop;
            }
        }
コード例 #9
0
 internal void Stop(CloseEventArgs e, bool send, bool wait)
 {
     lock (_sync)
     {
         _state = ServerState.ShuttingDown;
         byte[]   frameAsBytes = ((!send) ? null : WebSocketFrame.CreateCloseFrame(e.PayloadData, mask: false).ToByteArray());
         TimeSpan timeout      = ((!wait) ? TimeSpan.Zero : _waitTime);
         foreach (WebSocketServiceHost value in _hosts.Values)
         {
             value.Sessions.Stop(e, frameAsBytes, timeout);
         }
         _hosts.Clear();
         _state = ServerState.Stop;
     }
 }
コード例 #10
0
        internal void Stop(ushort code, string reason)
        {
            byte[]         array;
            CloseEventArgs closeEventArg = new CloseEventArgs(code, reason);
            bool           flag          = !code.IsReserved();

            if (flag)
            {
                array = WebSocketFrame.CreateCloseFrame(closeEventArg.PayloadData, false).ToArray();
            }
            else
            {
                array = null;
            }
            this.Sessions.Stop(closeEventArg, array, flag);
        }
コード例 #11
0
        internal void Stop(CloseEventArgs e, bool send, bool wait)
        {
            lock (_sync) {
                _state = ServerState.ShuttingDown;
                var bytes = send
                    ? WebSocketFrame.CreateCloseFrame(e.PayloadData, false).ToByteArray()
                    : null;

                var timeout = wait ? _waitTime : TimeSpan.Zero;
                foreach (var host in _hosts.Values)
                {
                    host.Sessions.Stop(e, bytes, timeout);
                }

                _hosts.Clear();
                _state = ServerState.Stop;
            }
        }
コード例 #12
0
        private void stop(PayloadData payloadData, bool send)
        {
            var bytes = send
                  ? WebSocketFrame.CreateCloseFrame(payloadData, false).ToArray()
                  : null;

            lock (_sync) {
                _state = ServerState.ShuttingDown;

                _sweepTimer.Enabled = false;
                foreach (var session in _sessions.Values.ToList())
                {
                    session.Context.WebSocket.Close(payloadData, bytes);
                }

                _state = ServerState.Stop;
            }
        }
コード例 #13
0
        internal void Stop(byte [] data, bool send)
        {
            lock (_sync) {
                _state = ServerState.ShuttingDown;

                var payload      = new PayloadData(data);
                var args         = new CloseEventArgs(payload);
                var frameAsBytes =
                    send ? WebSocketFrame.CreateCloseFrame(Mask.Unmask, payload).ToByteArray() : null;

                foreach (var host in _hosts.Values)
                {
                    host.Sessions.Stop(args, frameAsBytes);
                }

                _hosts.Clear();
                _state = ServerState.Stop;
            }
        }