Esempio n. 1
0
        public void Close(ushort code, string reason)
        {
            if (_state == SocketStat.Closed)
            {
                return;
            }

            if (_state == SocketStat.Closing)
            {
                return;
            }

            _state       = SocketStat.Closed;
            _closeCode   = code;
            _closeReason = reason;

            if (_closeCode >= 1000 && !string.IsNullOrEmpty(_closeReason))
            {
                var buf    = new BufferData();
                var writer = new BufferWriter(buf);
                writer.WriteUInt16(code);
                writer.WriteString(reason);
                writer.Flush();
                SendFrame(0x08, _sendingMaskMode && !_isserver, true, buf);
            }
            else
            {
                SendFrame(0x08, _sendingMaskMode && !_isserver, true, null);
            }
        }
Esempio n. 2
0
        internal WebSocket(TcpSocket socket, HttpServerRequest context, ArraySegment <byte> head)
        {
            _context                = context;
            _socket                 = socket;
            _socket.OnData         += OnData;
            _socket.OnDisconnected += OnSocketDisconnected;
            _recvstate              = RecvStat.Start1;
            _fragmented             = 0;
            _payloadData            = new BufferData();
            _sendingQueue           = new BufferData();
            _sendingTextMode        = false;
            _sendingMaskMode        = false;
            _isserver               = true;
            _state = SocketStat.Open;

            if (head.Count > 0)
            {
                OnData(_socket, head);
            }

            _socket.NoDelay = true;
            _socket.ReceiveStart();
        }