Exemplo n.º 1
0
        /// <summary>
        /// Attempt to connect and subscribe to the MQTT broker.
        /// </summary>
        /// <param name="entities"></param>
        public async Task Connect()
        {
            if (string.IsNullOrEmpty(SettingsControl.MqttUsername))
            {
                throw new ArgumentNullException(nameof(SettingsControl.MqttUsername));
            }

            if (string.IsNullOrEmpty(SettingsControl.MqttPassword))
            {
                throw new ArgumentNullException(nameof(SettingsControl.MqttPassword));
            }

            if (string.IsNullOrEmpty(SettingsControl.MqttBrokerHostname))
            {
                throw new ArgumentNullException(nameof(SettingsControl.MqttBrokerHostname));
            }

            // Create TCP-based connection options
            IMqttClientOptions mqttClientOptions = new MqttClientOptionsBuilder()
                                                   .WithTcpServer(SettingsControl.MqttBrokerHostname)
                                                   .WithCredentials(SettingsControl.MqttUsername, SettingsControl.MqttPassword)
                                                   .WithCleanSession()
                                                   .Build();

            await WebRequests.WaitForNetworkAvailable();

            // If we disconnect for any reason, attempt to reconnect
            AttemptReconnectOnDisconnect = true;

            while (!MqttClient.IsConnected)
            {
                try
                {
                    await MqttClient.ConnectAsync(mqttClientOptions);
                }
                catch (Exception e)
                {
                    Telemetry.TrackException(nameof(Connect), e);

                    await Task.Delay(TimeSpan.FromSeconds(1));
                }
            }
        }