예제 #1
0
        private IDisposable BindObserver(
            IMqttMessageBus target,
            TEntity entity,
            TEntityDefinition entityDefinition,
            MqttQualityOfServiceLevel?qualityOfServiceLevel,
            bool retainMessages)
        => GetStateChangeDetector(entity)
        .Subscribe(
            state =>
        {
            var payload = GetStateMessagePayload(entityDefinition, entity);

            var messageBuilder = new MqttApplicationMessageBuilder()
                                 .WithTopic(entityDefinition.StateTopic)
                                 .WithPayload(payload)
                                 .WithRetainFlag(retainMessages);

            if (qualityOfServiceLevel.HasValue)
            {
                messageBuilder = messageBuilder.WithQualityOfServiceLevel(qualityOfServiceLevel.Value);
            }

            var message = messageBuilder.Build();

            if (message.Payload != null)
            {
                target.PublishMessage(message);
            }
        }
            );
예제 #2
0
        public async Task <MqttClientPublishResult> SendDiscoveryAsync <TEntityDefinition>(
            string topic,
            TEntityDefinition payload,
            CancellationToken cancellationToken = default)
            where TEntityDefinition : IEntityDefinition
        {
            var payloadString = GetPayloadString(payload);

            var messageBuilder = new MqttApplicationMessageBuilder()
                                 .WithTopic(topic)
                                 .WithPayload(payloadString)
                                 .WithRetainFlag(Settings.Value.Retain);

            if (Settings.Value.QualityOfService.HasValue)
            {
                messageBuilder = messageBuilder.WithQualityOfServiceLevel(Settings.Value.QualityOfService.Value);
            }

            Logger.LogInformation("[{topic}] {payload}", topic, payloadString);

            var message = messageBuilder.Build();

            var result = await MqttClient.PublishAsync(message, cancellationToken);

            return(result);
        }
        protected MqttApplicationMessage CreateDefaultDiscoveryMessage(TEntityDefinition entityDefinition)
        {
            var messageBuilder = new MqttApplicationMessageBuilder()
                                 .WithTopic(DiscoveryTopic)
                                 .WithPayload(GetDiscoveryPayloadString(entityDefinition))
                                 .WithRetainFlag(RetainDiscoveryMessages);

            if (DiscoveryMessageQualityOfServiceLevel.HasValue)
            {
                messageBuilder = messageBuilder.WithQualityOfServiceLevel(DiscoveryMessageQualityOfServiceLevel.Value);
            }

            return(messageBuilder.Build());
        }
예제 #4
0
        private MqttApplicationMessage BuildMessage()
        {
            byte[] data = input.SelectedBinaryValue;
            MqttApplicationMessageBuilder messageBuilder = new MqttApplicationMessageBuilder()
                                                           .WithPayload(new MemoryStream(data), data.Length)
                                                           .WithTopic(topicPublish.Text);

            if (qosPublish.SelectedIndex == -1)
            {
                qosPublish.SelectedIndex = 0;
            }
            messageBuilder.WithQualityOfServiceLevel((MqttQualityOfServiceLevel)qosPublish.SelectedIndex);
            messageBuilder.WithRetainFlag(retain.Checked);
            return(messageBuilder.Build());
        }
        protected MqttApplicationMessage CreateDefaultDeleteMessage()
        {
            var messageBuilder = new MqttApplicationMessageBuilder()
                                 .WithTopic(DiscoveryTopic)
                                 .WithPayload(Array.Empty <byte>());

            if (DiscoveryMessageQualityOfServiceLevel.HasValue)
            {
                messageBuilder = messageBuilder.WithQualityOfServiceLevel(DiscoveryMessageQualityOfServiceLevel.Value);
            }

            var message = messageBuilder.Build();

            return(message);
        }
예제 #6
0
        public bool sendMessage(string theTopic, byte[] Data, MessagePriority priority = FedNetConstante.DEFAULT_PRIORITY)
        {
            if (!_theGameClient.IsConnected)
            {
                return(false);
            }
            if (theTopic == "")
            {
                return(false);
            }
            MqttApplicationMessageBuilder theMsgBuilder = new MqttApplicationMessageBuilder();

            theMsgBuilder.WithTopic(FedNetConstante.CLIENT_TO_SERVER + FedNetConstante.DEFAULT_TOPIC_SEPARATOR + ClientId + FedNetConstante.DEFAULT_TOPIC_SEPARATOR + theTopic);
            theMsgBuilder.WithQualityOfServiceLevel((MqttQualityOfServiceLevel)priority);
            theMsgBuilder.WithPayload(Data);
            _theGameClient.PublishAsync(theMsgBuilder.Build());
            return(true);
        }
예제 #7
0
        public async Task <MqttClientPublishResult> SendDeleteAsync(
            string topic,
            CancellationToken cancellationToken = default)
        {
            var messageBuilder = new MqttApplicationMessageBuilder()
                                 .WithTopic(topic)
                                 .WithPayload(Array.Empty <byte>())
                                 .WithRetainFlag(Settings.Value.Retain);

            if (Settings.Value.QualityOfService.HasValue)
            {
                messageBuilder = messageBuilder.WithQualityOfServiceLevel(Settings.Value.QualityOfService.Value);
            }

            var message = messageBuilder.Build();
            var result  = await MqttClient.PublishAsync(message, cancellationToken);

            return(result);
        }
        private static MqttApplicationMessage BuildApplicationMessage(MqttMessageSettings mqttMessageSettings)
        {
            var mqttMessageBuilder = new MqttApplicationMessageBuilder()
                                     .WithTopic(mqttMessageSettings.Topic)
                                     .WithPayload(mqttMessageSettings.Payload);

            if (mqttMessageSettings.QualityOfServiceLevel.HasValue)
            {
                mqttMessageBuilder = mqttMessageBuilder.WithQualityOfServiceLevel(mqttMessageSettings.QualityOfServiceLevel.Value);
            }

            if (mqttMessageSettings.Retain.HasValue)
            {
                mqttMessageBuilder = mqttMessageBuilder.WithRetainFlag(mqttMessageSettings.Retain.Value);
            }

            var mqttMessage = mqttMessageBuilder.Build();

            return(mqttMessage);
        }