Example #1
0
        public MqttClientOptionsBuilder WithWebSocketServer(string uri)
        {
            _webSocketOptions = new MqttClientWebSocketOptions
            {
                Uri = uri
            };

            return(this);
        }
Example #2
0
 public MqttWebSocketChannel(MqttClientWebSocketOptions options)
 {
     _options = options ?? throw new ArgumentNullException(nameof(options));
 }
Example #3
0
        public static async Task RunMQTTClientAsync()
        {
            try
            {
                AutoReconnect = true;
                Settings settings = Program.Settings;
                var      factory  = new MqttFactory();
                mqttClient = factory.CreateMqttClient();

                var ClientID = settings.MQTT_CLIENT_ID.Replace("%rnd%", new Guid().ToString());

                var WillMessage = new MqttApplicationMessageBuilder()
                                  .WithTopic((BasePublishingTopic + "/$state").Replace("//", "/"))
                                  .WithPayload("lost")
                                  .WithAtLeastOnceQoS()
                                  .WithRetainFlag(false)
                                  .Build();

                var Credentials = new MqttClientCredentials
                {
                    Username = settings.MQTT_CRED_USERNAME,
                    Password = settings.MQTT_CRED_PASSWORD
                };

                var TlsOptions = new MqttClientTlsOptions
                {
                    UseTls = settings.MQTT_USE_TLS
                };

                var ChannelOptions_WebSocket = new MqttClientWebSocketOptions
                {
                    Uri        = settings.MQTT_SERVER_WEBSOCKET,
                    TlsOptions = TlsOptions
                };

                var ChannelOptions_TCP = new MqttClientTcpOptions
                {
                    Server     = settings.MQTT_SERVER_TCP,
                    TlsOptions = TlsOptions
                };

                clientOptions = new MqttClientOptions();

                if (settings.MQTT_CONNECTION_METHOD == MQTT_CONNECTION_METHOD.TCP)
                {
                    clientOptions = new MqttClientOptions
                    {
                        CleanSession         = settings.MQTT_CLEAN_SESSION,
                        ClientId             = ClientID,
                        Credentials          = Credentials,
                        ChannelOptions       = ChannelOptions_TCP,
                        CommunicationTimeout = TimeSpan.FromSeconds(3),
                        WillMessage          = WillMessage
                    };
                }
                else
                {
                    clientOptions = new MqttClientOptions
                    {
                        CleanSession         = settings.MQTT_CLEAN_SESSION,
                        ClientId             = ClientID,
                        Credentials          = Credentials,
                        ChannelOptions       = ChannelOptions_WebSocket,
                        CommunicationTimeout = TimeSpan.FromSeconds(3),
                        WillMessage          = WillMessage
                    };
                }

                // Assign events
                mqttClient.ApplicationMessageReceived += async(s, e) => { await MqttClient_ApplicationMessageReceived(s, e); };
                mqttClient.Connected    += async(s, e) => { await MqttClient_Connected(s, e); };
                mqttClient.Disconnected += async(s, e) => { await MqttClient_Disconnected(s, e); };

                // Connect to the MQTT broker/server
                try
                {
                    DoLog("Connecting to MQTT server...", false);
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    await mqttClient.ConnectAsync(clientOptions);

                    if (mqttClient.IsConnected)
                    {
                        DoLog("OK", 3, false, 10);
                        //await SendMQTTMessageAsync("$state", "init", true);
                        stopwatch.Stop();
                        DoLog($"{stopwatch.ElapsedMilliseconds}ms", 3, true, 14);
                    }
                    else
                    {
                        DoLog("FAIL", 3, true, 14);
                        Program.BootWithoutError = false;
                    }
                }
                catch (Exception exception)
                {
                    DoLog("ERROR", 3, true, 12);
                    Program.BootWithoutError = false;
                    LogException(exception);
                }
            }
            catch (Exception ex)
            {
                LogException(ex);
                Program.BootWithoutError = false;
            }
            return;
        }
Example #4
0
 public MqttWebSocketChannel CreateWebSocketChannel(MqttClientWebSocketOptions webSocketOptions)
 {
     return(new MqttWebSocketChannel(webSocketOptions));
 }
Example #5
0
        private static async Task RunClientAsync(string[] arguments)
        {
            MqttNetTrace.TraceMessagePublished += (s, e) =>
            {
                Console.WriteLine($">> [{e.ThreadId}] [{e.Source}] [{e.Level}]: {e.Message}");
                if (e.Exception != null)
                {
                    Console.WriteLine(e.Exception);
                }
            };

            try
            {
                var options = new MqttClientWebSocketOptions
                {
                    Uri = "broker.hivemq.com:8000/mqtt"
                };

                ////var options = new MqttClientOptions
                ////{
                ////    Server = "localhost",
                ////    ClientId = "XYZ",
                ////    CleanSession = true
                ////};

                var mqttClient = new MqttClientFactory().CreateMqttClient();
                mqttClient.ApplicationMessageReceived += (s, e) =>
                {
                    Console.WriteLine("### RECEIVED APPLICATION MESSAGE ###");
                    Console.WriteLine($"+ Topic = {e.ApplicationMessage.Topic}");
                    Console.WriteLine($"+ Payload = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
                    Console.WriteLine($"+ QoS = {e.ApplicationMessage.QualityOfServiceLevel}");
                    Console.WriteLine($"+ Retain = {e.ApplicationMessage.Retain}");
                    Console.WriteLine();
                };

                mqttClient.Connected += async(s, e) =>
                {
                    Console.WriteLine("### CONNECTED WITH SERVER ###");

                    await mqttClient.SubscribeAsync(new List <TopicFilter>
                    {
                        new TopicFilter("#", MqttQualityOfServiceLevel.AtMostOnce)
                    });
                };

                mqttClient.Disconnected += async(s, e) =>
                {
                    Console.WriteLine("### DISCONNECTED FROM SERVER ###");
                    await Task.Delay(TimeSpan.FromSeconds(5));

                    try
                    {
                        await mqttClient.ConnectAsync(options);
                    }
                    catch
                    {
                        Console.WriteLine("### RECONNECTING FAILED ###");
                    }
                };

                try
                {
                    await mqttClient.ConnectAsync(options);
                }
                catch (Exception exception)
                {
                    Console.WriteLine("### CONNECTING FAILED ###" + Environment.NewLine + exception);
                }

                Console.WriteLine("### WAITING FOR APPLICATION MESSAGES ###");

                var messageFactory = new MqttApplicationMessageFactory();
                while (true)
                {
                    Console.ReadLine();

                    var applicationMessage = messageFactory.CreateApplicationMessage("myTopic", "Hello World", MqttQualityOfServiceLevel.AtLeastOnce);
                    await mqttClient.PublishAsync(applicationMessage);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }
Example #6
0
 private void BuildWebSocketServerOptions(MqttClientWebSocketOptions x)
 {
     x.Uri            = Uri;
     x.RequestHeaders = RequestHeaders;
     x.TlsOptions     = GetTlsOptions();
 }
Example #7
0
 public WebSocket4NetMqttChannel(IMqttClientOptions clientOptions, MqttClientWebSocketOptions webSocketOptions)
 {
     _clientOptions    = clientOptions ?? throw new ArgumentNullException(nameof(clientOptions));
     _webSocketOptions = webSocketOptions ?? throw new ArgumentNullException(nameof(webSocketOptions));
 }