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); } }
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(); }