Araqne.Web.WebSocketFrame.Encode C# (CSharp) Метод

Encode() публичный Метод

public Encode ( ) : byte[]
Результат byte[]
        public byte[] Encode()
        {
            int len = payload.Length;
            int capacity = 2 + len;

            if (len <= 125)
                capacity += 0;
            else if (len <= 65535)
                capacity += 2;
            else
                capacity += 8;

            if (mask)
                capacity += 4;

            MemoryStream stream = new MemoryStream(new byte[capacity], 0, capacity, true, true);

            // fin(1) | reserved(3) | opcode(4)
            int b1 = (int)opcode;
            if (fin)
                b1 |= 0x80;

            stream.WriteByte((byte)b1);

            // mask(1) | payload len(7) | extended payload len (16 or 64)

            if (len <= 125)
            {
                stream.WriteByte((byte)maskBit(len));
            }
            else if (len <= 65535)
            {
                stream.WriteByte((byte)maskBit(126));
                stream.WriteByte((byte)(len >> 8));
                stream.WriteByte((byte)len);
            }
            else
            {
                stream.WriteByte((byte)maskBit(127));
                for (int i = 7; i >= 0; i--)
                    stream.WriteByte((byte)(len >> (i * 8)));
            }

            if (mask)
            {
                stream.Write(maskingKey, 0, maskingKey.Length);

                // encode payload
                byte[] masked = new byte[payload.Length];
                for (int i = 0; i < payload.Length; i++)
                    masked[i] = (byte)(payload[i] ^ maskingKey[i % 4]);
                stream.Write(masked, 0, masked.Length);
            }
            else
            {
                stream.Write(payload, 0, payload.Length);
            }

            return stream.GetBuffer();
        }

Usage Example

Пример #1
0
        public void Send(string text)
        {
            if (closed)
            {
                throw new IOException("websocket is closed");
            }

            WebSocketFrame frame = new WebSocketFrame(text);

            byte[] encoded = frame.Encode();
            client.GetStream().Write(encoded, 0, encoded.Length);
            client.GetStream().Flush();
        }
All Usage Examples Of Araqne.Web.WebSocketFrame::Encode