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;
}
}