public async Task StartAsync()
        {
            if (disposedValue)
            {
                throw new InvalidOperationException("Client is disposed.");
            }
            await clientLock.WaitAsync();

            try
            {
                var options = new ManagedMqttClientOptionsBuilder()
                              .WithAutoReconnectDelay(TimeSpan.FromSeconds(10))
                              .WithClientOptions(new MqttClientOptionsBuilder()
                                                 .WithClientId(Guid.NewGuid().ToString())
                                                 .WithTcpServer(Server, Port)
                                                 .WithCredentials(AccessToken)
                                                 .WithTls(new MqttClientOptionsBuilderTlsParameters {
                    UseTls = UseTls
                })
                                                 .Build())
                              .Build();
                client = factory.CreateManagedMqttClient();
                await client.StartAsync(options);
            }
            finally
            {
                clientLock.Release();
            }
        }
Beispiel #2
0
        private async void cloudCred(string di, string ak, string ass)
        {
            clientId = di;
            string mqttURI        = "broker.losant.com";
            string mqttUser       = ak;
            string mqttPassword   = ass;
            int    mqttPort       = 1883;
            bool   mqttSecure     = false;
            var    messageBuilder = new MqttClientOptionsBuilder()
                                    .WithClientId(clientId)
                                    .WithCredentials(mqttUser, mqttPassword)
                                    .WithTcpServer(mqttURI, mqttPort)
                                    .WithCleanSession();
            var options = mqttSecure
              ? messageBuilder
                          .WithTls()
                          .Build()
              : messageBuilder
                          .Build();
            var managedOptions = new ManagedMqttClientOptionsBuilder()
                                 .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                 .WithClientOptions(options)
                                 .Build();

            client = new MqttFactory().CreateManagedMqttClient();
            client.ConnectedHandler    = new MqttClientConnectedHandlerDelegate(connected);
            client.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(disconnected);
            client.UseApplicationMessageReceivedHandler(e => { HandleMessageReceived(e.ApplicationMessage); });
            await client.StartAsync(managedOptions);
        }
Beispiel #3
0
        private async void button1_Click(object sender, EventArgs e)
        {
            var factory = new MqttFactory();

            _mqttClient = factory.CreateManagedMqttClient();

            _mqttClient.ConnectedHandler = new MqttClientConnectedHandlerDelegate(OnSubscriberConnected);

            _mqttClient.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(OnSubscriberDisconnected);

            _mqttClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(OnSubscriberMessageReceived);

            await _mqttClient
            .SubscribeAsync(new TopicFilterBuilder()
                            .WithTopic($"devices/{IdentifierBox.Text}/config")
                            .WithAtMostOnceQoS()
                            .Build());

            var options = new ManagedMqttClientOptionsBuilder()
                          .WithClientOptions(new MqttClientOptionsBuilder()
                                             .WithKeepAlivePeriod(TimeSpan.FromSeconds(5))
                                             .WithClientId(IdentifierBox.Text)
                                             .WithCredentials(UserName.Text, Password.Text)
                                             .WithTcpServer(IpAddressBox.Text, int.Parse(ServerPort.Text))
                                             .WithCleanSession())
                          .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                          .Build();

            await _mqttClient.StartAsync(options);
        }
Beispiel #4
0
        private static int _iLastUpdateThreshold      = 10;    // Minutes

        public static async void StartMQTT(string strMQTTServer, string strClientId, string strUser, string strPassword, MessageHandler messageHandler)
        {
            Logging.WriteDebugLog("MQTT.StartMQTT()");

            if (strMQTTServer == null || strMQTTServer == "")
            {
                return;
            }

            _timerMQTT = new Timer(Update, null, TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(5));

            _strClientId    = strClientId;
            _messageHandler = messageHandler;

            IManagedMqttClientOptions options = new ManagedMqttClientOptionsBuilder().WithAutoReconnectDelay(TimeSpan.FromSeconds(5)).WithClientOptions(new MqttClientOptionsBuilder()
                                                                                                                                                        .WithClientId(_strClientId)
                                                                                                                                                        .WithCredentials(strUser, strPassword)
                                                                                                                                                        .WithTcpServer(strMQTTServer)
                                                                                                                                                        .Build())
                                                .Build();

            _mqtt = new MqttFactory().CreateManagedMqttClient();

            _mqtt.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(MessageProcessor);

            await _mqtt.StartAsync(options);
        }
Beispiel #5
0
        /// <summary>
        /// 重启启动
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task RestartAsync()
        {
            try
            {
                await StopAsync();

                var model = await FileConfig.GetMqttSetAsync();

                MqttClient = new MqttFactory().CreateManagedMqttClient();
                var mqttClientOptions = new MqttClientOptionsBuilder()
                                        .WithKeepAlivePeriod(TimeSpan.FromSeconds(29))
                                        .WithClientId(model.ClientId)
                                        .WithWebSocketServer($"{model.Host}:{model.Port}/mqtt")
                                        .WithCredentials(model.UserName, model.Password);

                if (model.ConnectionMethod == ConnectionMethod.WSS)
                {
                    mqttClientOptions = mqttClientOptions.WithTls();
                }

                var options = new ManagedMqttClientOptionsBuilder()
                              .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                              .WithClientOptions(mqttClientOptions.Build())
                              .Build();

                await MqttClient.StartAsync(options);
            }
            catch (Exception ex)
            {
                Log.Logger.Error($"MQTT启动异常,{ex.Message}");
            }
        }
Beispiel #6
0
        static async Task Main(string[] args)
        {
            var options = new ManagedMqttClientOptionsBuilder()
                          .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                          .WithClientOptions(new MqttClientOptionsBuilder()
                                             .WithClientId("Ali_Consumer")
                                             .WithCredentials("testuser", "testpass")
                                             .WithTcpServer("www.baltavista.com", 8883)
                                             .WithCleanSession(true)
                                             .Build())
                          .Build();

            _mqttClient = new MqttFactory().CreateManagedMqttClient();
            await _mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("test1").Build());

            await _mqttClient.StartAsync(options);

            _mqttClient.UseApplicationMessageReceivedHandler(e =>
            {
                Console.WriteLine($"({DateTime.Now}):{Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
            });

            Console.WriteLine("-- MQTT Consumer started ---");
            Console.ReadLine();
        }
Beispiel #7
0
    public MQTTHelper(string clientId, string mqttURI, string mqttUser, string mqttPassword, int mqttPort, string topicSubscribe = "", Action <string> CallBack = null, bool mqttSecure = false)
    {
        _CallBack = CallBack;

        var messageBuilder = new MqttClientOptionsBuilder()
                             .WithClientId(clientId)
                             .WithCredentials(mqttUser, mqttPassword)
                             .WithTcpServer(mqttURI, mqttPort)
                             .WithCleanSession();

        var options = mqttSecure
            ? messageBuilder
                      .WithTls()
                      .Build()
            : messageBuilder
                      .Build();

        var managedOptions = new ManagedMqttClientOptionsBuilder()
                             .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                             .WithClientOptions(options)
                             .Build();

        Client = new MqttFactory().CreateManagedMqttClient();
        Client.StartAsync(managedOptions);

        if (!string.IsNullOrEmpty(topicSubscribe))
        {
            var x = this.SubscribeAsync(topicSubscribe).Result;
        }
        this.Client.UseApplicationMessageReceivedHandler(e => {
            string message = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
            _CallBack?.Invoke(message);
        });
    }
        public virtual async Task StartMqttClient()
        {
            _logger.Info("Starting MQTT client..");
            _managedMqttClient = new MqttFactory().CreateManagedMqttClient();

            // This is event is hit when we receive a message from the broker.
            _managedMqttClient.ApplicationMessageReceived += (s, a) =>
            {
                var topic         = a.ApplicationMessage.Topic;
                var decodedString = Encoding.UTF8.GetString(a.ApplicationMessage.Payload);
                _logger.Trace($"Message from topic '{topic}' received.");
                _logger.Trace($"Decoded Message: {decodedString}");
                HandleMqttApplicationMessageReceived(topic, decodedString);
            };

            // This just tells us that a message we sent was received successfully by the broker.
            _managedMqttClient.ApplicationMessageProcessed += (s, a) =>
            {
                _logger.Trace("Client Message Processed by Broker", a);
                if (a.HasSucceeded == false)
                {
                    // TODO: What to do here?
                    // Add to a file? And retry later?
                }
            };

            await _managedMqttClient.SubscribeAsync(new List <TopicFilter> {
                new TopicFilterBuilder().WithTopic(_moduleConfiguration.MqttValuePushTopic).WithAtLeastOnceQoS().Build()
            });

            await _managedMqttClient.StartAsync(GetMqttClientOptions());
        }
        private async void StartMessagingClient()
        {
            _mqttClient = new MqttFactory().CreateManagedMqttClient();

            //Build options for the MQTT client based off of config values
            //If running as a Docker container on Ability Edge, the Edge runtime will supply these values to the container
            var options = new ManagedMqttClientOptionsBuilder()
                          .WithClientOptions(
                new MQTTnet.Client.MqttClientOptionsBuilder()
                .WithClientId(this.Configuration.ClientId)
                .WithTcpServer(
                    this.Configuration.ServerUri.Host,
                    this.Configuration.ServerUri.Port)
                .WithCredentials(
                    this.Configuration.Username,
                    this.Configuration.Password)
                .WithKeepAlivePeriod(
                    TimeSpan.FromMilliseconds(
                        DEFAULT_KEEP_ALIVE_PERIOD_MS))
                .WithCleanSession(this.Configuration.CleanSession)
                .Build())
                          .WithAutoReconnectDelay(
                TimeSpan.FromMilliseconds(DEFAULT_AUTO_RECONNECT_DELAY_MS))
                          .Build();

            _mqttClient.ApplicationMessageReceived += OnApplicationMessageReceived;

            await _mqttClient.StartAsync(options);

            Console.WriteLine($"MQTT client created and started.");
        }
Beispiel #10
0
        static async Task Main(string[] args)
        {
            var mqttFactory = new MqttFactory();

            var tlsOptions = new MqttClientTlsOptions
            {
                UseTls = false,
                IgnoreCertificateChainErrors      = true,
                IgnoreCertificateRevocationErrors = true,
                AllowUntrustedCertificates        = true
            };

            var options = new MqttClientOptions
            {
                ClientId        = "Note",
                ProtocolVersion = MqttProtocolVersion.V311,
                ChannelOptions  = new MqttClientTcpOptions
                {
                    Server     = "xx.xx.xx.xx",
                    Port       = 1883,
                    TlsOptions = tlsOptions
                }
            };

            if (options.ChannelOptions == null)
            {
                throw new InvalidOperationException();
            }

            options.Credentials = new MqttClientCredentials
            {
                Username = "******",
                Password = Encoding.UTF8.GetBytes("123456")
            };

            var topicFilter = new MqttTopicFilter {
                Topic = "esp32/dht/temperature"
            };


            options.CleanSession    = true;
            options.KeepAlivePeriod = TimeSpan.FromSeconds(5);

            managedMqttClientSubscriber = mqttFactory.CreateManagedMqttClient();
            managedMqttClientSubscriber.ConnectedHandler    = new MqttClientConnectedHandlerDelegate(OnSubscriberConnected);
            managedMqttClientSubscriber.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(OnSubscriberDisconnected);
            managedMqttClientSubscriber.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(OnSubscriberMessageReceived);

            await managedMqttClientSubscriber.SubscribeAsync(topicFilter);

            await managedMqttClientSubscriber.StartAsync(
                new ManagedMqttClientOptions
            {
                ClientOptions = options
            });

            while (true)
            {
            }
        }
Beispiel #11
0
        private async void OnStarted()
        {
            var brokerSettings = _configuration.GetSection("BrokerSettings").Get <BrokerSettings>();
            var options        = new ManagedMqttClientOptionsBuilder()
                                 .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                 .WithClientOptions(new MqttClientOptionsBuilder()
                                                    .WithClientId(_serviceSettings.NodeId)
                                                    .WithTcpServer(brokerSettings.Host, brokerSettings.Port)
                                                    .WithCredentials(brokerSettings.Username, brokerSettings.Password)
                                                    .WithCleanSession(false)
                                                    .Build())
                                 .Build();

            _client.UseConnectedHandler(handler =>
            {
                _logger.LogInformation("Connected successfully with MQTT Brokers.");
            });

            _client.UseDisconnectedHandler(handler =>
            {
                _logger.LogWarning("Disconnected from MQTT Brokers.");
            });

            await _client.StartAsync(options);

            _timer = new Timer(HandleTimerCallback, null, TimeSpan.Zero,
                               TimeSpan.FromMilliseconds(_serviceSettings.TimeSpan));
        }
        public MqttService(IHubContext <DevicesHub> hubContext)
        {
#if true
            _hubContext = hubContext;
            var messageBuilder = new MqttClientOptionsBuilder().WithClientId(clientId) /*.WithCredentials(mqttUser, mqttPassword)*/.WithTcpServer(mqttURI, mqttPort).WithCleanSession();

            var options = mqttSecure
              ? messageBuilder
                          .WithTls()
                          .Build()
              : messageBuilder
                          .Build();

            var managedOptions = new ManagedMqttClientOptionsBuilder().WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                 .WithClientOptions(options)
                                 .Build();

            client = new MqttFactory().CreateManagedMqttClient();
            client.StartAsync(managedOptions);

            client.UseConnectedHandler(ClientConnectedHandler);
            //client.UseDisconnectedHandler(ClientDisconnectedHandler);
            client.ConnectingFailedHandler = new ConnectingFailedHandlerDelegate(OnConnectingFailed);
            client.UseApplicationMessageReceivedHandler(ClientMessageReceivedHandler);
#endif
        }
Beispiel #13
0
        public async Task Start()
        {
            var optionsBuilder = new ManagedMqttClientOptionsBuilder();

            optionsBuilder = optionsBuilder.WithClientOptions(
                o => o
                .WithTcpServer(_parameters.Server, _parameters.Port)
                .WithCredentials(_parameters.Username, _parameters.Password)
                .WithClientId(_parameters.ClientId)
                .WithTls(new MqttClientOptionsBuilderTlsParameters
            {
                UseTls = _parameters.UseTls
            }));

            if (!string.IsNullOrEmpty(_parameters.ClientId))
            {
                optionsBuilder = optionsBuilder.WithClientOptions(o => o.WithClientId(_parameters.ClientId));
            }

            var options = optionsBuilder.Build();

            if (_mqttService.IsLowLevelMqttLoggingEnabled)
            {
                _mqttClient = new MqttFactory().CreateManagedMqttClient(); //new LoggerAdapter(_logger));
            }
            else
            {
                _mqttClient = new MqttFactory().CreateManagedMqttClient();
            }

            await _mqttClient.SubscribeAsync(_parameters.Topic, _parameters.QualityOfServiceLevel).ConfigureAwait(false);

            _mqttClient.UseApplicationMessageReceivedHandler(e => OnApplicationMessageReceived(e));
            await _mqttClient.StartAsync(options).ConfigureAwait(false);
        }
Beispiel #14
0
        public MqttSink(MqttSinkOptions options, IManagedMqttClient client) : base(options)
        {
            MqttClient = client;
            Topics     = options.Topics.ToList();
            Options    = options;

            var builder = new MqttClientOptionsBuilder()
                          .WithTcpServer(options.Server, options.Port);

            if (options.Password != null && options.Username != null)
            {
                builder = builder.WithCredentials(options.Username, options.Password);
            }

            var clientOptions = builder.Build();

            MqttClientOptions = new ManagedMqttClientOptionsBuilder()
                                .WithPendingMessagesOverflowStrategy(MQTTnet.Server.MqttPendingMessagesOverflowStrategy.DropOldestQueuedMessage)
                                .WithClientOptions(clientOptions)
                                .WithMaxPendingMessages(1).WithAutoReconnectDelay(TimeSpan.FromSeconds(10)).Build();

            MqttClient.UseDisconnectedHandler(HandleDisconnected);
            MqttClient.UseConnectedHandler(HandleConnected);

            client.StartAsync(MqttClientOptions).Wait();


            Next.Subscribe(payload =>
            {
                Publish(payload).Wait();
            });
        }
Beispiel #15
0
        private MqttIpcServer(MqttIpcServerConfiguration configuration, IIpcSerializer serializer, IIpcPacketRouter router, IIpcPacketHandlersContainer packetHandlersContainer)
        {
            _serializer = serializer;
            _router     = router;
            _packetHandlersContainer = packetHandlersContainer;
            string clientName = configuration.ClientName;
            string endPoint   = configuration.EndPoint;


            _client        = new MqttFactory().CreateManagedMqttClient(new MqttNetLogger(clientName));
            _packetFactory = new PacketContainerFactory();
            _queues        = new HashSet <string>();
            _packetHandlersContainer.Registered   += (sender, type) => CheckRouting(type).ConfigureAwait(false).GetAwaiter().GetResult();
            _packetHandlersContainer.Unregistered += (sender, type) =>
            {
                IRoutingInformation infos = _router.GetRoutingInformationsAsync(type).ConfigureAwait(false).GetAwaiter().GetResult();
                _client.UnsubscribeAsync(infos.IncomingTopic).ConfigureAwait(false).GetAwaiter().GetResult();
            };
            ManagedMqttClientOptions options = new ManagedMqttClientOptionsBuilder()
                                               .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                               .WithClientOptions(new MqttClientOptionsBuilder()
                                                                  .WithClientId(clientName)
                                                                  .WithTcpServer(endPoint)
                                                                  .Build())
                                               .Build();

            _client.ApplicationMessageReceived += (sender, args) => OnMessage(args.ClientId, args.ApplicationMessage);
            _client.StartAsync(options).ConfigureAwait(false).GetAwaiter().GetResult();
            _client.Connected    += (sender, args) => _log.Info($"[CONNECTED] {clientName} is connected on MQTT Broker {endPoint}");
            _client.Disconnected += (sender, args) => _log.Info($"[DISCONNECTED] {clientName} has been disconnected on MQTT Broker {endPoint}");
        }
        public bool TryConnect()
        {
            lock (_syncRoot)
            {
                if (IsConnected)
                {
                    // prevent duplicated concurrent re-connection
                    return(true);
                }

                if (!_mqttClient.IsStarted)
                {
                    _logger.LogInformation("Mqtt Client is trying to connect");
                    _mqttClient.StartAsync(_clientOptions).Wait();
                    _mqttClient.UseConnectedHandler(e => { _logger.LogInformation("MQTT Server connected!"); });
                    _mqttClient.UseDisconnectedHandler((e) =>
                    {
                        _logger.LogError("MQTT Server disconnected: " + e?.Exception?.Message);
                    });
                }


                return(_mqttClient.IsConnected);
            }
        }
        public async Task ConnectAsync(string clientId)
        {
            var messageBuilder = new MqttClientOptionsBuilder()
                                 .WithClientId(clientId)
                                 .WithCredentials(mqttUser, mqttPassword)
                                 .WithTcpServer(mqttURI, mqttPort)
                                 .WithCleanSession();

            var options = mqttSecure
                ? messageBuilder
                          .WithTls()
                          .Build()
                : messageBuilder
                          .Build();

            var managedOptions = new ManagedMqttClientOptionsBuilder()
                                 .WithAutoReconnectDelay(TimeSpan.FromSeconds(100))
                                 .WithClientOptions(options)
                                 .Build();

            if (clientMqtt != null)
            {
                await clientMqtt.StartAsync(managedOptions);
            }
        }
Beispiel #18
0
        public async Task ConnectAsync()
        {
            string clientId       = Guid.NewGuid().ToString();
            string mqttURI        = "farmer.cloudmqtt.com";
            string mqttUser       = "******";
            string mqttPassword   = "******";
            int    mqttPort       = 22017;
            bool   mqttSecure     = true;
            var    messageBuilder = new MqttClientOptionsBuilder()
                                    .WithClientId(clientId)
                                    .WithCredentials(mqttUser, mqttPassword)
                                    .WithTcpServer(mqttURI, mqttPort)
                                    .WithCleanSession();
            var options = mqttSecure
                ? messageBuilder
                          .WithTls()
                          .Build()
                : messageBuilder
                          .Build();
            var managedOptions = new ManagedMqttClientOptionsBuilder()
                                 .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                 .WithClientOptions(options)
                                 .Build();

            Client = new MqttFactory().CreateManagedMqttClient();
            await Client.StartAsync(managedOptions);
        }
Beispiel #19
0
 public async Task ConnectAsync()
 {
     string clientId       = Guid.NewGuid().ToString();
     string mqttURI        = "mqtt://*****:*****@farmer.cloudmqtt.com:10472";
     string mqttUser       = "******";
     string mqttPassword   = "******";
     int    mqttPort       = 10472;
     bool   mqttSecure     = false;
     var    messageBuilder = new MqttClientOptionsBuilder()
                             .WithClientId(clientId)
                             .WithCredentials(mqttUser, mqttPassword)
                             .WithTcpServer(mqttURI, mqttPort)
                             .WithCleanSession();
     var options = mqttSecure
         ? messageBuilder
                   .WithTls()
                   .Build()
         : messageBuilder
                   .Build();
     var managedOptions = new ManagedMqttClientOptionsBuilder()
                          .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                          .WithClientOptions(options)
                          .Build();
     await client.StartAsync(managedOptions);
 }
Beispiel #20
0
        private void CreateMQTTClient()
        {
            var clientOptions = new MqttClientOptions()
            {
                ClientId        = _config.RobotName,
                ProtocolVersion = MqttProtocolVersion.V500,
                ChannelOptions  = new MqttClientTcpOptions()
                {
                    Server     = $"{_brokerIP}",
                    Port       = _brokerPort,
                    TlsOptions = _config.TLSOptions
                },
                KeepAlivePeriod = _config.KeepalivePeriod,
                CleanSession    = _config.CleanSession
            };

            _mqttClient = new MqttFactory().CreateManagedMqttClient();
            _mqttClient.ConnectedHandler    = new MqttClientConnectedHandlerDelegate(OnConnected);
            _mqttClient.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(OnDisconnected);
            _mqttClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(OnMessageReceived);

            _mqttClient.StartAsync(new ManagedMqttClientOptions()
            {
                ClientOptions = clientOptions
            }).Wait();
        }
Beispiel #21
0
        public MessageSender(MessageSenderConfiguration messageSenderConfiguration)
        {
            _messageSenderConfiguration = messageSenderConfiguration;

            if (!_messageSenderConfiguration.Enabled)
            {
                return;
            }

            var messageBuilder = new MqttClientOptionsBuilder()
                                 .WithClientId(messageSenderConfiguration.ClientId)
                                 .WithTcpServer(messageSenderConfiguration.Uri, messageSenderConfiguration.PortNumber)
                                 .WithCleanSession();

            var options = messageSenderConfiguration.Secure? messageBuilder.WithTls().Build() : messageBuilder.Build();

            var managedOptions = new ManagedMqttClientOptionsBuilder()
                                 .WithAutoReconnectDelay(TimeSpan.FromSeconds(messageSenderConfiguration.AutoConnectDelaySeconds))
                                 .WithClientOptions(options)
                                 .Build();

            var clientFactory = new MqttFactory();

            _messageClient = clientFactory.CreateManagedMqttClient();

            _messageClient.StartAsync(managedOptions);
        }
        /// <summary>
        /// Opens the MQTT connection.
        /// </summary>
        public async Task StartAsync(IProcesMqttMessage messageHandler)
        {
            try
            {
                lock (startupLock)
                {
                    if (_managedMqttClient != null || ConnectionState == ConnectionState.Connected)
                    {
                        return;
                    }
                    _messageHandler = messageHandler;

                    ConnectionState    = ConnectionState.Connecting;
                    _managedMqttClient = _mqttClientFactory.CreateManagedMqttClient();
                    _managedMqttClient.ApplicationMessageReceivedHandler  = this;
                    _managedMqttClient.ApplicationMessageProcessedHandler = this;
                    _managedMqttClient.ConnectedHandler        = this;
                    _managedMqttClient.ConnectingFailedHandler = this;
                    _managedMqttClient.SynchronizingSubscriptionsFailedHandler = this;
                    _managedMqttClient.DisconnectedHandler = this;
                }
                await _managedMqttClient.StartAsync(_config.Options).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                _logger.LogCritical(new EventId(0), e, $"Exception while setting up the mqttclient to {this}");
                throw new MqttConnectionException($"Exception while setting up the mqttclient to {this}", e);
            }
        }
        /// <summary>
        /// Start the service by building the MQTT configuration
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _client = new MqttFactory().CreateManagedMqttClient();

            // Setup and start a managed MQTT client.
            var mqttClientOptions = new ManagedMqttClientOptionsBuilder()
                                    .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                    .WithClientOptions(new MqttClientOptionsBuilder()
                                                       .WithCommunicationTimeout(TimeSpan.FromSeconds(10))
                                                       .WithTcpServer(_options.BrokerAddress, _options.BrokerPort)
                                                       .Build())
                                    .Build();

            _client.UseConnectedHandler(async e =>
            {
                _logger.LogInformation("### CONNECTED WITH SERVER ###");

                await _client.SubscribeAsync(new TopicFilterBuilder().WithTopic(typeof(T).GetTopicName()).Build());

                _logger.LogInformation("### SUBSCRIBED ###");
            });

            _client.UseApplicationMessageReceivedHandler(e =>
            {
                var obj = JsonConvert.DeserializeObject <T>(Encoding.UTF8.GetString(e.ApplicationMessage.Payload));
                _topicHandler.Work(_client, obj);
            });

            _logger.LogInformation($"Connecting to server [{JsonConvert.SerializeObject(mqttClientOptions)}]...");
            await _client.StartAsync(mqttClientOptions);
        }
Beispiel #24
0
        public static async Task ConnectAsync()
        {
            var clientId     = Guid.NewGuid().ToString();
            var mqttURI      = "localhost";
            var mqttUser     = "******";
            var mqttPassword = "******";
            var mqttPort     = 1883;

            var messageBuilder = new MqttClientOptionsBuilder()
                                 .WithClientId(clientId)
                                 .WithCredentials(mqttUser, mqttPassword)
                                 .WithTcpServer(mqttURI, mqttPort)
                                 .WithCleanSession();

            var options = messageBuilder
                          .Build();

            var managedOptions = new ManagedMqttClientOptionsBuilder()
                                 .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                 .WithClientOptions(options)
                                 .Build();

            await client.StartAsync(managedOptions);

            client.UseConnectedHandler(e => { Console.WriteLine("Connected successfully with MQTT Brokers."); });

            client.UseDisconnectedHandler(e => { Console.WriteLine("Disconnected from MQTT Brokers."); });
        }
Beispiel #25
0
        public void Start()
        {
            var optionsBuilder = new ManagedMqttClientOptionsBuilder();

            optionsBuilder = optionsBuilder.WithClientOptions(
                o => o
                .WithTcpServer(_parameters.Server, _parameters.Port)
                .WithCredentials(_parameters.Username, _parameters.Password)
                .WithClientId(_parameters.ClientId)
                .WithTls(new MqttClientOptionsBuilderTlsParameters
            {
                UseTls = _parameters.UseTls
            }));

            if (!string.IsNullOrEmpty(_parameters.ClientId))
            {
                optionsBuilder = optionsBuilder.WithClientOptions(o => o.WithClientId(_parameters.ClientId));
            }

            var options = optionsBuilder.Build();

            _mqttClient = new MqttFactory().CreateManagedMqttClient(new LoggerAdapter(_logger));
            _mqttClient.SubscribeAsync(_parameters.Topic, _parameters.QualityOfServiceLevel).GetAwaiter().GetResult();
            _mqttClient.UseApplicationMessageReceivedHandler(e => OnApplicationMessageReceived(e));
            _mqttClient.StartAsync(options).GetAwaiter().GetResult();
        }
Beispiel #26
0
        public async Task ConnectAsync()
        {
            string clientId       = Guid.NewGuid().ToString();
            string mqttURI        = "YOUR_MQTT_URI_HERE";
            string mqttUser       = "******";
            string mqttPassword   = "******";
            int    mqttPort       = 000000000;
            bool   mqttSecure     = false;
            var    messageBuilder = new MqttClientOptionsBuilder()
                                    .WithClientId(clientId)
                                    .WithCredentials(mqttUser, mqttPassword)
                                    .WithTcpServer(mqttURI, mqttPort)
                                    .WithCleanSession();

            var options = mqttSecure ? messageBuilder.WithTls().Build()
              : messageBuilder.Build();

            var managedOptions = new ManagedMqttClientOptionsBuilder()
                                 .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                 .WithClientOptions(options)
                                 .Build();

            client = new MqttFactory().CreateManagedMqttClient();
            await client.StartAsync(managedOptions);
        }
Beispiel #27
0
 /// <summary>
 /// Opens the MQTT connection
 /// </summary>
 public async Task StartAsync()
 {
     try
     {
         lock (startupLock)
         {
             if (_managedMqttClient != null || ConnectionState == ConnectionState.Connected)
             {
                 return;
             }
             ConnectionState    = ConnectionState.Connecting;
             _managedMqttClient = _mqttClientFactory.CreateManagedMqttClient();
             _managedMqttClient.ApplicationMessageReceived  += ManagedMqttClientApplicationMessageReceived;
             _managedMqttClient.ApplicationMessageProcessed += ManagedMqttClientApplicationMessageProcessed;
             _managedMqttClient.Connected    += ManagedMqttClientConnected;
             _managedMqttClient.Disconnected += ManagedMqttClientDisconnected;
         }
         await _managedMqttClient.StartAsync(_config.Options).ConfigureAwait(false);
     }
     catch (Exception e)
     {
         _logger.LogCritical($"Exception while setting up the mqttclient to {this}", e);
         throw new MqttConnectionException($"Exception while setting up the mqttclient to {this}", e);
     }
 }
        /// <summary>
        /// Start logic
        /// </summary>
        /// <returns></returns>
        public async Task Start()
        {
            var clientOptions = new MqttClientOptionsBuilder()
                                .WithClientId($"BluewalkNukiBridge2Mqtt-{Environment.MachineName}-{Environment.UserName}")
                                .WithTcpServer(_mqttHost, _mqttPort);

            if (!string.IsNullOrEmpty(Configuration.Instance.Config.Mqtt.Username))
            {
                clientOptions = clientOptions.WithCredentials(Configuration.Instance.Config.Mqtt.Username,
                                                              Configuration.Instance.Config.Mqtt.Password);
            }

            var managedOptions = new ManagedMqttClientOptionsBuilder()
                                 .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
                                 .WithClientOptions(clientOptions);

            Log.Information($"MQTT: Connecting to {_mqttHost}:{_mqttPort}");
            await _mqttClient.StartAsync(managedOptions.Build());

            Log.Information($"Starting callback listener on {_httpListener.Prefixes.First()}");
            _stopHttpListener = false;
            HttpListenAsync();

            InitializeCallback();
            DiscoverLocks();

            if (_infoTimer.Interval > 0)
            {
                _infoTimer.Start();
            }
        }
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            await _mqttClient.StartAsync(_options);

            await _mqttClient.SubscribeAsync(_zigbeeEvents.BridgeState);

            await _mqttClient.SubscribeAsync(_zigbeeEvents.BridgeLog);

            await _mqttClient.SubscribeAsync(_zigbeeEvents.ConnectedDevices);

            await _mqttClient.SubscribeAsync(_brokerEvents.NewClientConnected);

            await _mqttClient.SubscribeAsync(_brokerEvents.NewClientDisconnected);

            using (var scope = _serviceScopeFactory.CreateScope())
            {
                var mediator = scope.ServiceProvider.GetService <IMediator>();
                var messages = await mediator.Send(new GetAllMqttSubscriptionMessagesQuery());

                if (messages != null)
                {
                    foreach (var message in messages)
                    {
                        await _mqttClient.SubscribeAsync(message.Topic);
                    }
                }
            }
        }
Beispiel #30
0
        public void initialize(string ip, string clientName, int AutoReconnectAfter, UnityAction <mqttMessage> messageReceivedCallback, string loggerName = null)
        {
            if (ranOnce)
            {
                return;
            }

            var options = new ManagedMqttClientOptionsBuilder()
                          .WithAutoReconnectDelay(TimeSpan.FromSeconds(AutoReconnectAfter))
                          .WithClientOptions(new MqttClientOptionsBuilder()
                                             .WithClientId(clientName)
                                             .WithTcpServer(ip)
                                             .WithKeepAlivePeriod(TimeSpan.FromSeconds(40))
                                             .WithKeepAliveSendInterval(TimeSpan.FromSeconds(5))
                                             //.WithCleanSession(true)
                                             .WithCommunicationTimeout(TimeSpan.FromSeconds(40))
                                             //.WithCleanSession(false)
                                             .Build())
                          .Build();

            if (loggerName != null)
            {
                client = new MqttFactory().CreateManagedMqttClient(new MqttNetLogger(loggerName));
#if DEBUG
                // Write all trace messages to the console window.
                //MqttNetGlobalLogger.LogMessagePublished += (s, e) =>
                //{
                //    var trace = $">> [{e.TraceMessage.Timestamp:O}] [{e.TraceMessage.ThreadId}] [{e.TraceMessage.Source}] [{e.TraceMessage.Level}]: {e.TraceMessage.Message}";
                //    if (e.TraceMessage.Exception != null)
                //    {
                //        trace += Environment.NewLine + e.TraceMessage.Exception.ToString();
                //    }

                //    Debug.Log("[LOGTRACE]: " + trace);
                //};
#endif
            }
            else
            {
                client = new MqttFactory().CreateManagedMqttClient();
            }

            //when connected
            client.Connected    += clientConnected;
            client.Disconnected += clientDisconnected;
            // register to message received
            client.ApplicationMessageReceived  += client_MqttMsgPublishReceived;
            client.ApplicationMessageProcessed += client_MqttMsgPublishProcessed;

            //internal Processing of new messages
            this.messageReceivedCallback = messageReceivedCallback;

            Debug.Log("newClient start async");
            client.StartAsync(options);

            ranOnce = true;
        }