Пример #1
0
        public void SingleQos_ExactlyOnce()
        {
            var expected = new[]
            {
                (byte)0x90,
                (byte)0x03,
                (byte)0x00,
                (byte)0x02,
                (byte)0x02,
            };

            MqttMessage msg = new MqttSubscribeAckMessage()
                              .WithMessageIdentifier(2)
                              .AddQosGrant(MqttQos.ExactlyOnce);

            Console.WriteLine(msg);

            byte[] actual = MessageSerializationHelper.GetMessageBytes(msg);

            Assert.Equal <int>(expected.Length, actual.Length);
            Assert.Equal <byte>(expected[0], actual[0]); // header byte 1
            Assert.Equal <byte>(expected[1], actual[1]); // remaining length
            Assert.Equal <byte>(expected[2], actual[2]); // message id b1
            Assert.Equal <byte>(expected[3], actual[3]); // message id b2
            Assert.Equal <byte>(expected[4], actual[4]); // QOS
        }
Пример #2
0
        public void MultipleQos()
        {
            // Message Specs________________
            // <90><03><00><02><00> <01><02>
            var sampleMessage = new[]
            {
                (byte)0x90,
                (byte)0x05,
                (byte)0x00,
                (byte)0x02,
                (byte)0x00,
                (byte)0x01,
                (byte)0x02,
            };

            MqttMessage baseMessage = MqttMessage.CreateFrom(sampleMessage);

            Console.WriteLine(baseMessage.ToString());

            // check that the message was correctly identified as a connect message.
            Assert.IsType <MqttSubscribeAckMessage>(baseMessage);
            MqttSubscribeAckMessage message = (MqttSubscribeAckMessage)baseMessage;

            Assert.Equal <int>(3, message.Payload.QosGrants.Count);
            Assert.Equal <MqttQos>(MqttQos.AtMostOnce, message.Payload.QosGrants[0]);
            Assert.Equal <MqttQos>(MqttQos.AtLeastOnce, message.Payload.QosGrants[1]);
            Assert.Equal <MqttQos>(MqttQos.ExactlyOnce, message.Payload.QosGrants[2]);
        }
Пример #3
0
        private void SubscribeReceived(IMqttSession session, MqttSubscribeMessage subscribeMessage)
        {
            MqttSubscribeAckMessage subAck = new MqttSubscribeAckMessage().WithMessageIdentifier(subscribeMessage.VariableHeader.MessageIdentifier);

            AddSubscriptions(session, subscribeMessage.Payload.Subscriptions);
            session.Write(subAck);
            PublishMessages(session, storageProvider.GetRetained(subscribeMessage.Payload.Subscriptions), true);
        }
Пример #4
0
        public void ClearGrantsClearsGrants()
        {
            MqttSubscribeAckMessage msg = new MqttSubscribeAckMessage()
                                          .WithMessageIdentifier(2)
                                          .AddQosGrant(MqttQos.AtMostOnce)
                                          .AddQosGrant(MqttQos.AtLeastOnce)
                                          .AddQosGrant(MqttQos.ExactlyOnce);

            Assert.Equal <int>(3, msg.Payload.QosGrants.Count);
            msg.Payload.ClearGrants();
            Assert.Equal <int>(0, msg.Payload.QosGrants.Count);
        }
Пример #5
0
        private void SubscribeReceived(WebSocketSession session, MqttSubscribeMessage subscribeMessage)
        {
            MqttSubscribeAckMessage subAck = new MqttSubscribeAckMessage().WithMessageIdentifier(subscribeMessage.VariableHeader.MessageIdentifier);

            AddSubscriptions(session, subscribeMessage.Payload.Subscriptions);
            using (var messageStream = new MemoryStream())
            {
                subAck.WriteTo(messageStream);
                ArraySegment <byte> bytes = new ArraySegment <byte>(messageStream.ToArray());
                session.Send(bytes);
            }
        }
Пример #6
0
        private async void SubscribeToTopic()
        {
            try
            {
                MqttSubscribeAckMessage ack = await SubscribeAsync(new[] { _subscription }, 1);

                _subscribed = true;
            }
            catch (Exception ex)
            {
                if (_errorCallback != null)
                {
                    _errorCallback(ex);
                }
            }
        }