public async Task CallAlert(SensorType type)
        {
            _logger.LogWarning("入侵报警计划任务");
            if (_lightHelper != null && _mqttHelper != null)
            {
                if (_lightHelper.CurrentStateMode == StateMode.Out)
                {
                    _logger.LogWarning("入侵报警执行中...");
                    MqttApplicationMessage message;
                    switch (type)
                    {
                    case SensorType.Door:
                        message = new MqttApplicationMessageBuilder()
                                  .WithTopic("Home/Sensor/Door")
                                  .WithPayload("1")
                                  .WithAtLeastOnceQoS()
                                  .Build();
                        await _mqttHelper.Publish(message);

                        _notify.Send("门道");
                        break;

                    case SensorType.Aisle:
                        message = new MqttApplicationMessageBuilder()
                                  .WithTopic("Home/Sensor/Aisle")
                                  .WithPayload("1")
                                  .WithAtLeastOnceQoS()
                                  .Build();
                        await _mqttHelper.Publish(message);

                        _notify.Send("走道");
                        break;

                    default:
                        break;
                    }
                }
                _logger.LogWarning("入侵报警取消...");
            }
        }
        private void StartPolling()
        {
            var cancellableDisposable = new CancellationDisposable();

            _devicePolling.Disposable = cancellableDisposable;

            var ct = cancellableDisposable.Token;

            var t = PollingTask();             // start it

            async Task PollingTask()
            {
                var settings = _settings.CurrentSettings;

                long count = 0;

                await Task.Delay(5000, ct);

                while (!ct.IsCancellationRequested)
                {
                    var msg = new MqttApplicationMessageBuilder()
                              .WithTopic($"{settings.BaseTopic}/bridge/config/devices/get")
                              .Build();

                    await _client.PublishAsync(msg);

                    if (count % 3 == 0)
                    {
                        var msg2 = new MqttApplicationMessageBuilder()
                                   .WithTopic($"{settings.BaseTopic}/bridge/networkmap")
                                   .WithPayload("raw")
                                   .Build();

                        await _client.PublishAsync(msg2);
                    }

                    await Task.Delay(TimeSpan.FromMinutes(5), ct);
                }
            }
        }
        public async void Publish(string topic, string payload)
        {
            if (!mqttClient.IsConnected)
            {
                try
                {
                    await Connect();
                }
                catch (TaskCanceledException) {; }
            }



            MqttApplicationMessage message = new MqttApplicationMessageBuilder()
                                             .WithTopic(topic)
                                             .WithPayload(payload)
                                             .WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce)
                                             .WithRetainFlag(false)
                                             .Build();

            await mqttClient.PublishAsync(message, CancellationToken.None);
        }
        public async Task <TResponse> Request <TRequest, TResponse>(TRequest message, string endpoint)
            where TRequest : class, IMessage
            where TResponse : class
        {
            Topic topic = new Topic
            {
                MessageId       = Guid.NewGuid(),
                MessageBodyType = message.GetType().FullName,
                MessageType     = MessageTypes.Command,
                SourceClientId  = _mqttClient.Options.ClientId,
                SourceEndpoint  = _options.Endpoint,
                TargetClientId  = "*",
                TargetEndpoint  = endpoint
            };

            var payload = new MqttApplicationMessageBuilder()
                          .WithPayload(JsonConvert.SerializeObject(message))
                          .WithAtMostOnceQoS()
                          .WithTopic(topic.ToString());

            await _mqttClient.PublishAsync(payload.Build());

            Waiter theWaiter = new Waiter {
                Sp = new Semaphore(0, 1)
            };

            RequestWaiter.WaitingDic[topic.MessageId] = theWaiter;

            bool success = theWaiter.Sp.WaitOne(TimeSpan.FromSeconds(_options.SendMessageTimeout));

            RequestWaiter.WaitingDic.TryRemove(topic.MessageId, out _);

            if (!success)
            {
                throw new TimeoutException("请求超时");
            }

            return(JsonConvert.DeserializeObject <TResponse>(theWaiter.ResponseJson));
        }
Exemple #5
0
        public MainPage()
        {
            InitializeComponent();

            MasterBehavior = MasterBehavior.Popover;

            MenuPages.Add((int)MenuItemType.Browse, (NavigationPage)Detail);

            MQTTSetup();

            MessagingCenter.Subscribe <ItemsPage, Item>(this, "selected", async(obj, item) =>
            {
                var newItem = item as Item;
                var message = new MqttApplicationMessageBuilder()
                              .WithTopic("my/item")
                              .WithPayload(item.Text)
                              .WithExactlyOnceQoS()
                              .WithRetainFlag()
                              .Build();
                await _mqttClient.PublishAsync(message);
            });
        }
Exemple #6
0
        private void PublishSingleValues_UpdateItem(
            AasEventMsgEnvelope ev,
            AdminShell.ReferableRootInfo ri,
            AdminShell.KeyList startPath,
            AasPayloadUpdateValueItem ui)
        {
            // trivial
            if (ev == null || ui == null || startPath == null || ui.Path == null)
            {
                return;
            }

            // value of the leaf
            var valStr = "" + ui.Value;

            // build a complete path of keys
            var path    = startPath + ui.Path;
            var pathStr = path.BuildIdShortPath();

            // publish
            if (_diaData.LogDebug)
            {
                _logger?.Info("Publish single value (update value)");
            }
            var message = new MqttApplicationMessageBuilder()
                          .WithTopic(GenerateTopic(
                                         _diaData.EventTopic, defaultIfNull: "SingleValue",
                                         aasIdShort: ri?.AAS?.idShort, aasId: ri?.AAS?.identification,
                                         smIdShort: ri?.Submodel?.idShort, smId: ri?.Submodel?.identification,
                                         path: pathStr))
                          .WithPayload(valStr)
                          .WithExactlyOnceQoS()
                          .WithRetainFlag(_diaData.MqttRetain)
                          .Build();

            // publish
            _mqttClient.PublishAsync(message).GetAwaiter().GetResult();
            LogStatus(incSingleValue: 1);
        }
Exemple #7
0
        public async Task CustomMqttConfigProviderGetsTriggered()
        {
            var message = new MqttApplicationMessageBuilder()
                          .WithTopic("TestTopic/random")
                          .WithPayload("{ \"test\":\"case\" }")
                          .WithAtLeastOnceQoS()
                          .Build();

            using (var mqttServer = await MqttServerHelper.Get(_logger))
                using (var jobHost = await JobHostHelper <CustomMqttConfigProviderTestFunction> .RunFor(_testLoggerProvider))
                {
                    await mqttServer.PublishAsync(message);

                    await WaitFor(() => CustomMqttConfigProviderTestFunction.CallCount >= 1);
                }

            Assert.Equal(1, CustomMqttConfigProviderTestFunction.CallCount);
            Assert.Equal("TestTopic/random", CustomMqttConfigProviderTestFunction.LastReceivedMessage.Topic);
            var messageBody = Encoding.UTF8.GetString(CustomMqttConfigProviderTestFunction.LastReceivedMessage.GetMessage());

            Assert.Equal("{ \"test\":\"case\" }", messageBody);
        }
Exemple #8
0
        public async Task invioAsync(string sq)
        {
            var factory    = new MqttFactory();
            var mqttClient = factory.CreateMqttClient();

            var options = new MqttClientOptionsBuilder()
                          .WithTcpServer("192.168.101.49", 1883) // Port is optional
                          .Build();


            await mqttClient.ConnectAsync(options, CancellationToken.None);

            var message = new MqttApplicationMessageBuilder()
                          .WithTopic("")
                          .WithPayload(sq)
                          .WithExactlyOnceQoS()
                          .WithRetainFlag()
                          .Build();

            await mqttClient.PublishAsync(message);

            /*
             *          HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://192.168.102.11:8011/tables/AB123");
             *            httpWebRequest.ContentType = "text/json";
             *            httpWebRequest.Method = "POST";
             *
             *            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
             *            {
             *                streamWriter.Write(sq);
             *            }
             *
             *            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
             *
             *            Console.Out.WriteLine(httpResponse.StatusCode);
             *
             *            httpResponse.Close();
             *
             *            System.Threading.Thread.Sleep(1000);*/
        }
Exemple #9
0
        public async Task Publish_From_Server()
        {
            using (var testEnvironment = new TestEnvironment(TestContext))
            {
                var server = await testEnvironment.StartServerAsync();

                var receivedMessagesCount = 0;

                var client = await testEnvironment.ConnectClientAsync();

                client.UseApplicationMessageReceivedHandler(c => Interlocked.Increment(ref receivedMessagesCount));

                var message = new MqttApplicationMessageBuilder().WithTopic("a").WithAtLeastOnceQoS().Build();
                await client.SubscribeAsync(new TopicFilter { Topic = "a", QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce });

                await server.PublishAsync(message);

                await Task.Delay(1000);

                Assert.AreEqual(1, receivedMessagesCount);
            }
        }
Exemple #10
0
        public async Task Client_Publish()
        {
            var server = new MqttFactory().CreateMqttServer();

            try
            {
                var receivedMessages = new List <MqttApplicationMessage>();

                await server.StartAsync(new MqttServerOptions());

                var client1 = new MqttFactory().CreateMqttClient();
                client1.ApplicationMessageReceived += (_, e) =>
                {
                    lock (receivedMessages)
                    {
                        receivedMessages.Add(e.ApplicationMessage);
                    }
                };

                await client1.ConnectAsync(new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1").Build());

                await client1.SubscribeAsync("a");

                var client2 = new MqttFactory().CreateMqttClient();
                await client2.ConnectAsync(new MqttClientOptionsBuilder().WithTcpServer("127.0.0.1").Build());

                var message = new MqttApplicationMessageBuilder().WithTopic("a").WithRetainFlag().Build();
                await client2.PublishAsync(message);

                await Task.Delay(500);

                Assert.AreEqual(1, receivedMessages.Count);
                Assert.IsFalse(receivedMessages.First().Retain); // Must be false even if set above!
            }
            finally
            {
                await server.StopAsync();
            }
        }
Exemple #11
0
        private async void Btn_pub_Click(object sender, EventArgs e)
        {
            mqttTopicPub = textBox_pub.Text;
            string payload = this.textBox_send.Text;
            var    message = new MqttApplicationMessageBuilder()
                             .WithTopic(mqttTopicPub)
                             .WithPayload(payload)
                             .WithExactlyOnceQoS()
                             .Build();

            try
            {
                await mqttClient.PublishAsync(message);
            }
            catch (Exception err)
            {
                Invoke((new Action(() =>
                {
                    this.textBox_recv.AppendText(Environment.NewLine + err.ToString());
                })));
            }
        }
Exemple #12
0
        // обновление документа
        public async Task UpdateFromUIAsync(Client client, Device device)
        {
            if (device.TypeOfDevice == "Light")
            {
                if (ConnectSingleton.IsConnected == false)
                {
                    await _mqttClientService.ConnectAsync(client.Id);

                    await _mqttClientService.SubscribeAsync(device.Topic);

                    ConnectSingleton.getInstance(true);
                }
                var messagePayload = new MqttApplicationMessageBuilder()
                                     .WithTopic(device.Topic)
                                     .WithPayload(device.Payload)
                                     .WithExactlyOnceQoS()
                                     .WithRetainFlag()
                                     .Build();
                await _mqttClientService.PublishAsync(messagePayload);
            }
            await Devices.ReplaceOneAsync(new BsonDocument("_id", new ObjectId(device.Id)), device);
        }
        private void RegisterMqtt(Mqtt_Settings settings)
        {
            Console.WriteLine($"Sub started in {settings.ClientId}");
            var factory = new MqttFactory();

            Client        = factory.CreateMqttClient();
            ClientOptions = new MqttClientOptionsBuilder()
                            .WithClientId(settings.ClientId)
                            .WithTcpServer(settings.Host)
                            .Build();

            var PublishOptions = new MqttApplicationMessageBuilder()
                                 .WithTopic("MyTopic")
                                 .WithPayload("Hello World")
                                 .WithExactlyOnceQoS()
                                 .WithRetainFlag()
                                 .Build();

            Client.ConnectedHandler = new MqttClientConnectedHandlerDelegate(e => {
                Client.SubscribeAsync(new TopicFilterBuilder().WithTopic(settings.SuscribeTopic).Build());
            });
        }
Exemple #14
0
        private void btn_send_Click(object sender, EventArgs e)
        {
            if (this.mqttclient.IsConnected)
            {
                for (int i = 0; i < int.Parse(this.nud_sendNum.Value.ToString()); i++)
                {
                    MqttApplicationMessageBuilder builder = new MqttApplicationMessageBuilder();
                    builder.WithPayload(this.mtb_sendmsg.Text.Trim())
                    .WithTopic(this.mtb_sendTopic.Text.Trim());
                    switch (this.cb_sendQos.SelectedText)
                    {
                    case "0":
                        builder.WithAtMostOnceQoS();
                        break;

                    case "1":
                        builder.WithAtLeastOnceQoS();
                        break;

                    case "2":
                        builder.WithExactlyOnceQoS();
                        break;
                    }

                    if (this.nud_sendDelay.Value > 0)
                    {
                        Task.Delay(new TimeSpan(0, 0, 0, 0, int.Parse(this.nud_sendDelay.Value.ToString()))).Wait();
                    }


                    this.mqttclient.PublishAsync(builder.Build());
                    insertLog($"topic:{this.mtb_sendTopic.Text.Trim()},value:{this.mtb_sendmsg.Text.Trim()}");
                }
            }
            else
            {
                MessageBox.Show("当前连接已断开,请连接后重试", "系统提示");
            }
        }
Exemple #15
0
        private async void Button_Offline_Click(object sender, RoutedEventArgs e)
        {
            var topic = InputPublishTopic.Text;

            if (topic.Length > 0)
            {
                var deviceId = topic.Substring(topic.LastIndexOf("/"));
                topic = "tamefire/tf5156/offline" + deviceId;
                PrintLog("开始发送离线到:" + topic);
                MqttApplicationMessage msg = new MqttApplicationMessageBuilder()
                                             .WithTopic(topic)
                                             .WithPayload(new byte[] { })
                                             .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.ExactlyOnce)
                                             .WithRetainFlag(false)
                                             .Build();

                await mqttClient.PublishAsync(msg);

                PrintLog("发送离线成功!");
                Console.WriteLine("### PUBLISHED ###");
            }
        }
Exemple #16
0
        public async Task Inject_ApplicationMessage_At_Server_Level()
        {
            using (var testEnvironment = CreateTestEnvironment())
            {
                var server = await testEnvironment.StartServer();

                var receiver = await testEnvironment.ConnectClient();

                var messageReceivedHandler = testEnvironment.CreateApplicationMessageHandler(receiver);

                await receiver.SubscribeAsync("#");

                var injectedApplicationMessage = new MqttApplicationMessageBuilder().WithTopic("InjectedOne").Build();

                await server.InjectApplicationMessage(new InjectedMqttApplicationMessage(injectedApplicationMessage));

                await LongTestDelay();

                Assert.AreEqual(1, messageReceivedHandler.ReceivedEventArgs.Count);
                Assert.AreEqual("InjectedOne", messageReceivedHandler.ReceivedEventArgs[0].ApplicationMessage.Topic);
            }
        }
Exemple #17
0
        public async Task SendMessageAsync(string deviceName, string message, int port = 1, bool confirmed = false)
        {
            var mqttMessage = new MqttApplicationMessageBuilder()
                              .WithTopic($"{_aplicationName}/devices/{deviceName}/down")
                              .WithPayload(JsonConvert.SerializeObject(
                                               new Message()
            {
                confirmed   = confirmed,
                payload_raw = Convert.ToBase64String(ASCIIEncoding.UTF8.GetBytes(message)),
                port        = port
            }))
                              .Build();

            try
            {
                await _client.PublishAsync(mqttMessage);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemple #18
0
        /// <summary>
        ///     Sends the client status to "status/categories/{category}/nodes/{clientId}".
        /// </summary>
        /// <param name="server">IMqttServer</param>
        /// <param name="clientId">string</param>
        /// <param name="state">NodeState</param>
        /// <returns>Task</returns>
        public static Task SendClientStatus(IMqttServer server, string clientId, NodeState state)
        {
            if (!server.IsStarted)
            {
                return(Task.CompletedTask);
            }

            if (clientId.StartsWith("client-") || string.IsNullOrWhiteSpace(clientId) || state == null || state.Category == null)
            {
                return(Task.CompletedTask);
            }

            var message = new MqttApplicationMessageBuilder()
                          .WithTopic($"status/categories/{state.Category}/nodes/{clientId}")
                          .WithPayload(JsonSerializer.Serialize(state))
                          .WithExactlyOnceQoS()
                          .WithRetainFlag()
                          .Build();

            server.PublishAsync(message, CancellationToken.None).GetAwaiter().GetResult();
            return(Task.CompletedTask);
        }
Exemple #19
0
        public async Task SendData(GlobalVars globalVars, ApiResponse apiResponse)
        {
            var triggers = _monitoringSystem.GetTriggers();

            if (globalVars.mqttIsConnect == true)
            {
                try
                {
                    globalVars.upTime = GetUptime().ToString(@"dd\.hh\:mm\:ss");
                    var send_data = new MqttApplicationMessageBuilder()
                                    .WithTopic("devices/" + apiResponse.Params.Token + "/data")
                                    .WithPayload("token=" + apiResponse.Params.Token +
                                                 "&gpu=" + globalVars.card +
                                                 "&temp=" + string.Join(",", ((OHMSensor)triggers[0].Sensor).Sensors) +
                                                 "&fan=" + globalVars.fan +
                                                 "&start_timestamp=" + globalVars.start_timestamp.ToString() +
                                                 "&v=" + apiResponse.Params.Version +
                                                 "&load=" + globalVars.load +
                                                 "&clock=" + globalVars.clock +
                                                 "&mem=" + globalVars.mem +
                                                 "&upTime=" + globalVars.upTime)
                                    .WithExactlyOnceQoS()
                                    .WithRetainFlag()
                                    .Build();

                    await globalVars.client.PublishAsync(send_data);
                }
                catch (MQTTnet.Exceptions.MqttCommunicationException ex)
                {
                    // MqttConnect();
                    Debug.WriteLine("Send data MqttCommunicationException: " + ex.Message);
                    Message("Send data MqttCommunicationException: " + ex.Message, globalVars, apiResponse);
                }
                catch (Exception ex)
                {
                    Message("Send data Ex: " + ex.Message, globalVars, apiResponse);
                }
            }
        }
Exemple #20
0
        public async Task MultipleTriggersReceiveOwnMessages()
        {
            using (var mqttServer = await MqttServerHelper.Get(_logger))
                using (var jobHost = await JobHostHelper <MultipleTriggersTestFunction> .RunFor(_testLoggerProvider))
                {
                    await mqttServer.PublishAsync(DefaultMessage);

                    var secondMessage = new MqttApplicationMessageBuilder()
                                        .WithTopic("test/topic2")
                                        .WithPayload("{ \"test\":\"case\" }")
                                        .WithAtLeastOnceQoS()
                                        .Build();
                    await mqttServer.PublishAsync(secondMessage);

                    await WaitFor(() => MultipleTriggersTestFunction.CallCountFunction1 >= 1 && MultipleTriggersTestFunction.CallCountFunction2 >= 1);
                }

            Assert.Equal(1, MultipleTriggersTestFunction.CallCountFunction1);
            Assert.Equal(1, MultipleTriggersTestFunction.CallCountFunction2);
            Assert.Equal("test/topic", MultipleTriggersTestFunction.LastReceivedMessageFunction1.Topic);
            Assert.Equal("test/topic2", MultipleTriggersTestFunction.LastReceivedMessageFunction2.Topic);
        }
Exemple #21
0
        public async Task Subscribe_Lots_In_Multiple_Requests()
        {
            using (var testEnvironment = new TestEnvironment(TestContext))
            {
                var receivedMessagesCount = 0;

                await testEnvironment.StartServer();

                var c1 = await testEnvironment.ConnectClient();

                c1.UseApplicationMessageReceivedHandler(c => Interlocked.Increment(ref receivedMessagesCount));

                for (var i = 0; i < 500; i++)
                {
                    var so = new MqttClientSubscribeOptionsBuilder()
                             .WithTopicFilter(i.ToString()).Build();

                    await c1.SubscribeAsync(so).ConfigureAwait(false);

                    await Task.Delay(10);
                }

                var c2 = await testEnvironment.ConnectClient();

                var messageBuilder = new MqttApplicationMessageBuilder();
                for (var i = 0; i < 500; i++)
                {
                    messageBuilder.WithTopic(i.ToString());

                    await c2.PublishAsync(messageBuilder.Build()).ConfigureAwait(false);

                    await Task.Delay(10);
                }

                SpinWait.SpinUntil(() => receivedMessagesCount == 500, 5000);

                Assert.AreEqual(500, receivedMessagesCount);
            }
        }
Exemple #22
0
        public async void PublishAsync()
        {
            using var mock = AutoMock.GetLoose();
            mock.Mock <IManagedMqttClient>();
            var rxMqttClinet = mock.Create <RxMqttClient>();

            var message = new MqttApplicationMessageBuilder()
                          .WithTopic("T")
                          .WithPayload("P")
                          .WithExactlyOnceQoS()
                          .Build();

            var mangedMessage = new ManagedMqttApplicationMessageBuilder()
                                .WithApplicationMessage(message)
                                .Build();

            // act
            await rxMqttClinet.PublishAsync(mangedMessage);

            // test
            mock.Mock <IManagedMqttClient>().Verify(x => x.PublishAsync(mangedMessage));
        }
Exemple #23
0
        public async Task No_Payload()
        {
            using (var testEnvironment = new TestEnvironment(TestContext))
            {
                await testEnvironment.StartServer();

                var sender = await testEnvironment.ConnectClient();

                var receiver = await testEnvironment.ConnectClient();

                var message = new MqttApplicationMessageBuilder().WithTopic("A");

                await receiver.SubscribeAsync(
                    new MqttClientSubscribeOptions
                {
                    TopicFilters = new List <MqttTopicFilter> {
                        new MqttTopicFilter {
                            Topic = "#"
                        }
                    }
                },
                    CancellationToken.None);

                MqttApplicationMessage receivedMessage = null;
                receiver.ApplicationMessageReceivedAsync += e =>
                {
                    receivedMessage = e.ApplicationMessage;
                    return(PlatformAbstractionLayer.CompletedTask);
                };

                await sender.PublishAsync(message.Build(), CancellationToken.None);

                await Task.Delay(1000);

                Assert.IsNotNull(receivedMessage);
                Assert.AreEqual("A", receivedMessage.Topic);
                Assert.AreEqual(null, receivedMessage.Payload);
            }
        }
Exemple #24
0
        public async Task Use_User_Properties()
        {
            using (var testEnvironment = new TestEnvironment(TestContext))
            {
                await testEnvironment.StartServerAsync();

                var sender = await testEnvironment.ConnectClientAsync(new MqttClientOptionsBuilder().WithProtocolVersion(MqttProtocolVersion.V500));

                var receiver = await testEnvironment.ConnectClientAsync(new MqttClientOptionsBuilder().WithProtocolVersion(MqttProtocolVersion.V500));

                var message = new MqttApplicationMessageBuilder()
                              .WithTopic("A")
                              .WithUserProperty("x", "1")
                              .WithUserProperty("y", "2")
                              .WithUserProperty("z", "3")
                              .WithUserProperty("z", "4"); // z is here two times to test list of items

                await receiver.SubscribeAsync(new MqttClientSubscribeOptions
                {
                    TopicFilters = new List <TopicFilter>
                    {
                        new TopicFilter {
                            Topic = "#"
                        }
                    }
                }, CancellationToken.None);

                MqttApplicationMessage receivedMessage = null;
                receiver.UseApplicationMessageReceivedHandler(e => receivedMessage = e.ApplicationMessage);

                await sender.PublishAsync(message.Build(), CancellationToken.None);

                await Task.Delay(1000);

                Assert.IsNotNull(receivedMessage);
                Assert.AreEqual("A", receivedMessage.Topic);
                Assert.AreEqual(4, receivedMessage.UserProperties.Count);
            }
        }
        /// <summary>
        /// Publish a message to an MQTT topic
        /// </summary>
        /// <param name="topic"></param>
        /// <param name="message"></param>
        /// <param name="retain"></param>
        /// <returns></returns>
        private async Task Publish(string topic, string message, bool retain = true)
        {
            if (_mqttClient == null || !_mqttClient.IsConnected)
            {
                return;
            }
            topic = $"{_mqttRootTopic}/{topic}";
#if DEBUG
            topic = $"dev/{topic}";
#endif
            Log.Information($"MQTT: Publishing message to {topic}");
            Log.Debug($"MQTT: Message: {message}");

            var msg = new MqttApplicationMessageBuilder()
                      .WithTopic(topic)
                      .WithPayload(message)
                      .WithExactlyOnceQoS()
                      .WithRetainFlag(retain)
                      .Build();

            await _mqttClient.PublishAsync(msg);
        }
        public async Task Subscribe_Lots_In_Single_Request()
        {
            using (var testEnvironment = CreateTestEnvironment())
            {
                var receivedMessagesCount = 0;

                await testEnvironment.StartServer();

                var c1 = await testEnvironment.ConnectClient();

                c1.ApplicationMessageReceivedAsync += e =>
                {
                    Interlocked.Increment(ref receivedMessagesCount);
                    return(PlatformAbstractionLayer.CompletedTask);
                };

                var optionsBuilder = new MqttClientSubscribeOptionsBuilder();
                for (var i = 0; i < 500; i++)
                {
                    optionsBuilder.WithTopicFilter(i.ToString());
                }

                await c1.SubscribeAsync(optionsBuilder.Build()).ConfigureAwait(false);

                var c2 = await testEnvironment.ConnectClient();

                var messageBuilder = new MqttApplicationMessageBuilder();
                for (var i = 0; i < 500; i++)
                {
                    messageBuilder.WithTopic(i.ToString());

                    await c2.PublishAsync(messageBuilder.Build()).ConfigureAwait(false);
                }

                SpinWait.SpinUntil(() => receivedMessagesCount == 500, TimeSpan.FromSeconds(20));

                Assert.AreEqual(500, receivedMessagesCount);
            }
        }
Exemple #27
0
        public async Task PublishRemoveIDMCommand(Guid moduleId)
        {
            var mqttOptions = new MqttClientOptionsBuilder()
                              .WithClientId("LiveboltServer")
                              .WithTcpServer("localhost")
                              .WithCredentials("livebolt", "livebolt")
                              .Build();

            var mqttClient = new MqttFactory().CreateMqttClient();

            await mqttClient.ConnectAsync(mqttOptions);

            var message = new MqttApplicationMessageBuilder()
                          .WithTopic($"idm/remove/{moduleId}")
                          .WithPayload(1.ToString())
                          .WithExactlyOnceQoS()
                          .Build();

            await mqttClient.PublishAsync(message);

            await mqttClient.DisconnectAsync();
        }
Exemple #28
0
        public async Task PublicshAsync(string topic, byte[] payload, int retain = 0, int qos = 0)
        {
            if (mqttClient != null)
            {
                bool retainFlag = retain == 1;

                var mqMessageBuilder = new MqttApplicationMessageBuilder().WithTopic(topic).WithPayload(payload).WithRetainFlag(retainFlag);

                mqMessageBuilder.WithAtMostOnceQoS();

                var result = await mqttClient.PublishAsync(mqMessageBuilder.Build());

                if (result.ReasonCode != MQTTnet.Client.Publishing.MqttClientPublishReasonCode.Success)
                {
                    Console.WriteLine("发送消息失败,topic[" + topic + "],Code:" + result.ReasonCode.ToString());
                }
                else
                {
                    Console.WriteLine("发送消息成功topic[" + topic + "]:" + Encoding.UTF8.GetString(payload));
                }
            }
        }
Exemple #29
0
        static Task PublishAsync(CancellationToken token, int sleepMiliseconds = 1000)
        {
            Task task = null;

            task = Task.Run(() =>
            {
                var rnd = new Random();


                while (true)
                {
                    if (token.IsCancellationRequested)
                    {
                        throw new TaskCanceledException(task);
                    }

                    if (!_mqttClient.IsStarted || !_mqttClient.IsConnected)
                    {
                        Thread.Sleep(1000);
                        continue;
                    }

                    var payload = $"{rnd.Next(0, 50)}";

                    var message = new MqttApplicationMessageBuilder()
                                  .WithTopic("test1")
                                  .WithPayload(payload)
                                  .WithAtMostOnceQoS()
                                  .WithRetainFlag()
                                  .Build();

                    _mqttClient.PublishAsync(message);
                    Console.WriteLine($"PUBLISHED: {payload}");
                    Thread.Sleep(sleepMiliseconds);
                }
            });
            return(task);
        }
Exemple #30
0
        private static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            MQTTnet.MqttFactory factory = new MQTTnet.MqttFactory();
            var client  = factory.CreateMqttClient();
            var options = new MqttClientOptionsBuilder()
                          .WithClientId(Guid.NewGuid().ToString())
                          .WithTcpServer("localhost")
                          .WithCredentials("3cb97cd31fbc40b08d12ec47a6fad622", "")//token
                          .Build();

            client.UseApplicationMessageReceivedHandler(ax =>
            {
                Console.WriteLine($"ClientId{ ax.ClientId},msg={ax.ApplicationMessage.ConvertPayloadToString()}");
            });

            Task.Run(async() =>
            {
                await client.ConnectAsync(options);
                do
                {
                    var message = new MqttApplicationMessageBuilder()
                                  .WithTopic("/devices/me/telemetry")
                                  .WithPayload(JsonConvert.SerializeObject(new
                    {
                        RandomString = Guid.NewGuid().ToString(),
                        NowTime      = DateTime.Now
                    }))
                                  .Build();
                    Console.WriteLine(message.ConvertPayloadToString());
                    await client.PublishAsync(message);
                    await Task.Delay(TimeSpan.FromSeconds(10));
                    await client.SubscribeAsync("/devices/me/attributes/response/+");
                    await client.PublishAsync("/devices/me/attributes/request/1", "{\"anySide\":\"Doublevalue,longvalue,Doublevalue,longvalue\"}");
                } while (Console.ReadKey().Key != ConsoleKey.Escape);
                await client.DisconnectAsync();
            }).Wait();
        }