using System; using System.Collections.Generic; using System.Linq; using System.Text; using uPLibrary.Networking.M2Mqtt.Exceptions; namespace uPLibrary.Networking.M2Mqtt.Messages { /// /// Class for PINGRESP message from client to broker /// public class MqttMsgPingResp : MqttMsgBase { /// /// Constructor /// public MqttMsgPingResp() { this.type = MQTT_MSG_PINGRESP_TYPE; } /// /// Parse bytes for a PINGRESP message /// /// First fixed header byte /// Protocol Version /// Channel connected to the broker /// PINGRESP message instance public static MqttMsgPingResp Parse(byte fixedHeaderFirstByte, byte protocolVersion, IMqttNetworkChannel channel) { MqttMsgPingResp msg = new MqttMsgPingResp(); if (protocolVersion == MqttMsgConnect.PROTOCOL_VERSION_V3_1_1) { // [v3.1.1] check flag bits if ((fixedHeaderFirstByte & MSG_FLAG_BITS_MASK) != MQTT_MSG_PINGRESP_FLAG_BITS) throw new MqttClientException(MqttClientErrorCode.InvalidFlagBits); } // already know remaininglength is zero (MQTT specification), // so it isn't necessary to read other data from socket int remainingLength = MqttMsgBase.decodeRemainingLength(channel); return msg; } public override byte[] GetBytes(byte protocolVersion) { byte[] buffer = new byte[2]; int index = 0; // first fixed header byte if (protocolVersion == MqttMsgConnect.PROTOCOL_VERSION_V3_1_1) buffer[index++] = (MQTT_MSG_PINGRESP_TYPE << MSG_TYPE_OFFSET) | MQTT_MSG_PINGRESP_FLAG_BITS; // [v.3.1.1] else buffer[index++] = (MQTT_MSG_PINGRESP_TYPE << MSG_TYPE_OFFSET); buffer[index++] = 0x00; return buffer; } public override string ToString() { #if TRACE return this.GetTraceString( "PINGRESP", null, null); #else return base.ToString(); #endif } } }