public MqttClientOptionsBuilder WithWebSocketServer(string uri) { _webSocketOptions = new MqttClientWebSocketOptions { Uri = uri }; return(this); }
public MqttWebSocketChannel(MqttClientWebSocketOptions options) { _options = options ?? throw new ArgumentNullException(nameof(options)); }
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; }
public MqttWebSocketChannel CreateWebSocketChannel(MqttClientWebSocketOptions webSocketOptions) { return(new MqttWebSocketChannel(webSocketOptions)); }
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); } }
private void BuildWebSocketServerOptions(MqttClientWebSocketOptions x) { x.Uri = Uri; x.RequestHeaders = RequestHeaders; x.TlsOptions = GetTlsOptions(); }
public WebSocket4NetMqttChannel(IMqttClientOptions clientOptions, MqttClientWebSocketOptions webSocketOptions) { _clientOptions = clientOptions ?? throw new ArgumentNullException(nameof(clientOptions)); _webSocketOptions = webSocketOptions ?? throw new ArgumentNullException(nameof(webSocketOptions)); }