public int parse(List <byte> input, ServerConfiguration configuration)
        {
            if (header == null)
            {
                header = new WebSocketHeader();
            }

            header.parse(input, configuration);

            header.getBytes(input, ref data, ref header.position, (int)header.length);

            if (header.mask)
            {
                for (int i = 0; i < data.Length; ++i)
                {
                    data[i] = (byte)(data[i] ^ header.maskKeys[i % 4]);
                }
            }

            if (header.opCode == OpCode.Close && data.Length == 2)
            {
                closeCode = BitConverter.ToUInt16(((byte[])data.ToArray <byte>().Clone()).Reverse().ToArray(), 0);
            }

            return(header.position);
        }
 public WebSocketFrame()
 {
     header      = new WebSocketHeader();
     header.fin  = WebSocketHeader.FINISH_MASK;
     header.rsv1 = 0;
     header.rsv2 = 0;
     header.rsv3 = 0;
 }
 public WebSocketFrame(byte[] data)
 {
     header        = new WebSocketHeader();
     header.fin    = WebSocketHeader.FINISH_MASK;
     header.rsv1   = 0;
     header.rsv2   = 0;
     header.rsv3   = 0;
     header.opCode = OpCode.Text;
     header.length = (ulong)data.Length;
     this.data     = data;
 }