private MessageHeader analyseHead(Byte[] buffer) { MessageHeader header = new MessageHeader(); header.FIN = (buffer[0] & 0x80) == 0x80 ? charOne : charZero; header.RSV1 = (buffer[0] & 0x40) == 0x40 ? charOne : charZero; header.RSV2 = (buffer[0] & 0x20) == 0x20 ? charOne : charZero; header.RSV3 = (buffer[0] & 0x10) == 0x10 ? charOne : charZero; if ((buffer[0] & 0xA) == 0xA) header.Opcode = OperType.Pong; else if ((buffer[0] & 0x9) == 0x9) header.Opcode = OperType.Ping; else if ((buffer[0] & 0x8) == 0x8) header.Opcode = OperType.Close; else if ((buffer[0] & 0x2) == 0x2) header.Opcode = OperType.Binary; else if ((buffer[0] & 0x1) == 0x1) header.Opcode = OperType.Text; else if ((buffer[0] & 0x0) == 0x0) header.Opcode = OperType.Row; header.MASK = (buffer[1] & 0x80) == 0x80 ? charOne : charZero; Int32 len = buffer[1] & 0x7F; if (len == 126) { header.Payloadlen = (UInt16)(buffer[2] << 8 | buffer[3]); if (header.MASK == charOne) { header.Maskey = new Byte[4]; Buffer.BlockCopy(buffer, 4, header.Maskey, 0, 4); header.PayloadDataStartIndex = 8; } else header.PayloadDataStartIndex = 4; } else if (len == 127) { Byte[] byteLen = new Byte[8]; Buffer.BlockCopy(buffer, 4, byteLen, 0, 8); header.Payloadlen = BitConverter.ToUInt64(byteLen, 0); if (header.MASK == charOne) { header.Maskey = new Byte[4]; Buffer.BlockCopy(buffer, 10, header.Maskey, 0, 4); header.PayloadDataStartIndex = 14; } else header.PayloadDataStartIndex = 10; } else { if (header.MASK == charOne) { header.Maskey = new Byte[4]; Buffer.BlockCopy(buffer, 2, header.Maskey, 0, 4); header.PayloadDataStartIndex = 6; } else header.PayloadDataStartIndex = 2; } return header; }
private MessageHeader analyseHead(Byte[] buffer) { MessageHeader header = new MessageHeader(); header.FIN = (buffer[0] & 0x80) == 0x80 ? charOne : charZero; header.RSV1 = (buffer[0] & 0x40) == 0x40 ? charOne : charZero; header.RSV2 = (buffer[0] & 0x20) == 0x20 ? charOne : charZero; header.RSV3 = (buffer[0] & 0x10) == 0x10 ? charOne : charZero; if ((buffer[0] & 0xA) == 0xA) { header.Opcode = OperType.Pong; } else if ((buffer[0] & 0x9) == 0x9) { header.Opcode = OperType.Ping; } else if ((buffer[0] & 0x8) == 0x8) { header.Opcode = OperType.Close; } else if ((buffer[0] & 0x2) == 0x2) { header.Opcode = OperType.Binary; } else if ((buffer[0] & 0x1) == 0x1) { header.Opcode = OperType.Text; } else if ((buffer[0] & 0x0) == 0x0) { header.Opcode = OperType.Row; } header.MASK = (buffer[1] & 0x80) == 0x80 ? charOne : charZero; Int32 len = buffer[1] & 0x7F; if (len == 126) { header.Payloadlen = (UInt16)(buffer[2] << 8 | buffer[3]); if (header.MASK == charOne) { header.Maskey = new Byte[4]; Buffer.BlockCopy(buffer, 4, header.Maskey, 0, 4); header.PayloadDataStartIndex = 8; } else { header.PayloadDataStartIndex = 4; } } else if (len == 127) { Byte[] byteLen = new Byte[8]; Buffer.BlockCopy(buffer, 4, byteLen, 0, 8); header.Payloadlen = BitConverter.ToUInt64(byteLen, 0); if (header.MASK == charOne) { header.Maskey = new Byte[4]; Buffer.BlockCopy(buffer, 10, header.Maskey, 0, 4); header.PayloadDataStartIndex = 14; } else { header.PayloadDataStartIndex = 10; } } else { if (header.MASK == charOne) { header.Maskey = new Byte[4]; Buffer.BlockCopy(buffer, 2, header.Maskey, 0, 4); header.PayloadDataStartIndex = 6; } else { header.PayloadDataStartIndex = 2; } } return(header); }