ALE.Tcp.WebSocket.DecodeClientData C# (CSharp) Метод

DecodeClientData() приватный Метод

private DecodeClientData ( byte bytes ) : string
bytes byte
Результат string
        private string DecodeClientData(byte[] bytes)
        {
            byte secondByte = bytes[1];
            //length = secondByte AND 127 // may not be the actual length in the two special cases
            int length = secondByte & 127;
            //indexFirstMask = 2          // if not a special case
            int indexFirstMask = 2;
            //if length == 126            // if a special case, change indexFirstMask
            //    indexFirstMask = 4
            if (length == 126)
            {
                indexFirstMask = 4;
            }
                //else if length == 127       // ditto
                //    indexFirstMask = 10
            else if (length == 127)
            {
                indexFirstMask = 10;
            }
            //masks = bytes.slice(indexFirstMask, 4) // four bytes starting from indexFirstMask
            byte[] masks = bytes.Skip(indexFirstMask).Take(4).ToArray();
            //indexFirstDataByte = indexFirstMask + 4 // four bytes further
            int indexFirstDataByte = indexFirstMask + 4;
            //decoded = new array
            var decoded = new byte[bytes.Length - indexFirstDataByte];
            //decoded.length = bytes.length - indexFirstDataByte // length of real data

            //for i = indexFirstDataByte, j = 0; i < bytes.length; i++, j++
            //    decoded[j] = bytes[i] XOR masks[j MOD 4]
            for (int i = indexFirstDataByte, j = 0; i < bytes.Length; i++, j++)
            {
                decoded[j] = (byte) (bytes[i] ^ masks[j%4]);
            }

            return Encoding.GetString(decoded);
        }