private bool digestIncomingBuffer(byte[] _buffer) { if (_buffer.Length == 0) { //the client has disconnected from the server return(false); } //message has successfully been received try { for (int i = 0; i < _buffer.Length; i++) { buffer.Add(_buffer[i]); } if (!handshaked) { try { header = draft.ParseServerResponseHandshake(buffer); if (header.Get("sec-websocket-accept") != expectedAccept) { //Error } handshaked = true; if (_onOpen != null) { _onOpen(); } } catch { } } if (handshaked) { Frame f; while ((f = draft.ParseServerFrameBytes(buffer)) != null) { if (f.OpCode == Frame.OpCodeType.Close) { break; } else if (f.OpCode == Frame.OpCodeType.Ping) { if (handshaked) { Frame res = new Frame(Frame.OpCodeType.Pong); byte[] b = draft.CreateClientFrameBytes(res); socket.BeginSend(b, 0, b.Length, SocketFlags.None, null, socket); } } else if (f.OpCode == Frame.OpCodeType.Pong) { } else if (f.OpCode == Frame.OpCodeType.Text) { if (OnMessage != null) { OnMessage(f.Message); } } } } } catch { } return(true); }