示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }