internal override MqttMessage Decode(byte[] message) { ConnectAckMessage connackMessage = new ConnectAckMessage(); int index = 0; byte fixedHeader = message[index]; base.DecodeFixedHeader(fixedHeader); int remainingLength = base.DecodeRemainingLength(message); int temp = remainingLength; //increase the fixed header size do { index++; temp = temp / 128; } while (temp > 0); index++; byte[] buffer = new byte[remainingLength]; Buffer.BlockCopy(message, index, buffer, 0, buffer.Length); //base.VariableHeader = new ConnackVariableHeader(); //index = base.VariableHeader.Decode(buffer); index = 0; byte reserved = buffer[index++]; if (reserved != 0x00) { this.SessionPresent = Convert.ToBoolean(reserved); } byte code = buffer[index++]; this.ReturnCode = (ConnectAckCode)code; return(connackMessage); }
internal override MqttMessage Decode(byte[] message) { ConnectAckMessage connackMessage = new ConnectAckMessage(); int index = 0; byte fixedHeader = message[index]; DecodeFixedHeader(fixedHeader); int remainingLength = DecodeRemainingLength(message); int temp = remainingLength; do { index++; temp /= 128; } while (temp > 0); index++; byte[] buffer = new byte[remainingLength]; Buffer.BlockCopy(message, index, buffer, 0, buffer.Length); index = 0; byte reserved = buffer[index++]; if (reserved != 0x00) { SessionPresent = Convert.ToBoolean(reserved); } byte code = buffer[index++]; ReturnCode = (ConnectAckCode)code; return(connackMessage); }
public static MqttMessage DecodeMessage(byte[] message) { byte fixedHeader = message[0]; byte msgType = (byte)(fixedHeader >> 0x04); MqttMessageType messageType = (MqttMessageType)msgType; MqttMessage mqttMessage = null; switch (messageType) { case MqttMessageType.CONNECT: mqttMessage = new ConnectMessage(); break; case MqttMessageType.CONNACK: mqttMessage = new ConnectAckMessage(); break; case MqttMessageType.PUBLISH: mqttMessage = new PublishMessage(); break; case MqttMessageType.PUBACK: mqttMessage = new PublishAckMessage(); break; case MqttMessageType.PUBREC: mqttMessage = new PublishAckMessage(); break; case MqttMessageType.PUBREL: mqttMessage = new PublishAckMessage(); break; case MqttMessageType.PUBCOMP: mqttMessage = new PublishAckMessage(); break; case MqttMessageType.SUBSCRIBE: mqttMessage = new SubscribeMessage(); break; case MqttMessageType.SUBACK: mqttMessage = new SubscriptionAckMessage(); break; case MqttMessageType.UNSUBSCRIBE: mqttMessage = new UnsubscribeMessage(); break; case MqttMessageType.UNSUBACK: mqttMessage = new UnsubscribeAckMessage(); break; case MqttMessageType.PINGREQ: mqttMessage = new PingRequestMessage(); break; case MqttMessageType.PINGRESP: mqttMessage = new PingResponseMessage(); break; case MqttMessageType.DISCONNECT: mqttMessage = new DisconnectMessage(); break; default: throw new InvalidOperationException("Unknown message type."); } mqttMessage.Decode(message); return(mqttMessage); }