CentralMine.NET.Client.ProcessWebsocketPacket C# (CSharp) Method

ProcessWebsocketPacket() public method

public ProcessWebsocketPacket ( NetworkStream stream ) : void
stream NetworkStream
return void
        void ProcessWebsocketPacket(NetworkStream stream)
        {
            byte[] temp = new byte[4096];
            temp[0] = 130;
            int read = stream.Read(temp, 1, (int)temp.Length - 1) + 1;

            int lengthBytes = 1;
            long length = temp[1] & 127;
            if (length == 126)
            {
                length = (temp[2] << 8);
                length = length | temp[3];
                lengthBytes += 2;
            }
            else if (length == 127)
            {
                length = (temp[2] << 56) | (temp[3] << 48) | (temp[4] << 40) | (temp[5] << 32) | (temp[6] << 24) | (temp[7] << 16) | (temp[8] << 8) | temp[9];
                lengthBytes += 8;
            }

            //Console.WriteLine(read + ": Websocket packet length: " + length);

            byte[] dataBytes = new byte[length];
            for (int i = 5 + lengthBytes, j = 0; i < read && j < length; i++, j++)
            {
                int mask = j % 4;
                byte maskByte = temp[1 + lengthBytes + mask];
                dataBytes[j] = (byte)(temp[i] ^ maskByte);
            }

            MemoryStream str = new MemoryStream(dataBytes);
            str.Position = 1;
            switch (dataBytes[0])
            {
                case 1:
                    ProcessIdentity(str, true);
                    break;
                case 2:
                    ProcessWorkComplete(str, true);
                    break;
                case 5: // Ping
                    break;
                case 7:
                    mClientInfoRequested = true;
                    break;
            }
        }