private async Task InitClient() { if (_mqttClient == null) { _mqttClient = _mqttfactory.CreateMqttClient(); var mqttHost = ConfigurationManagerExtensions.GetValueByKey("Mqtt:Host") ?? "127.0.0.1"; var option = new MQTTnet.Client.MqttClientOptions { ChannelOptions = new MQTTnet.Client.MqttClientTcpOptions { Server = mqttHost }, ClientId = "dudu_" + Guid.NewGuid().ToString(), //KeepAlivePeriod = new TimeSpan(0, 0, 1) }; _mqttClient.ApplicationMessageReceived += (sender, e) => { Console.WriteLine("Client Received: Do anything you want"); Console.WriteLine("Sender"); Console.WriteLine(JsonConvert.SerializeObject(sender)); Console.WriteLine("MqttApplicationMessageReceivedEventArgs"); Console.WriteLine(JsonConvert.SerializeObject(e)); }; _mqttClient.Disconnected += (sender, e) => { //try reconnect _mqttClient.ConnectAsync(option); }; await _mqttClient.ConnectAsync(option); await _mqttClient.SubscribeAsync(new List <TopicFilter>() { new TopicFilterBuilder() .WithTopic(_mqttClient.Options.ClientId) .WithAtLeastOnceQoS() .Build() }); } }
public bool Connect() { try { var factory = new MQTTnet.MqttFactory(); mqttClient = factory.CreateMqttClient(); var options = new MQTTnet.Client.Options.MqttClientOptionsBuilder() .WithTcpServer(this.Ip, this.Port) .Build(); mqttClient.ConnectAsync(options, System.Threading.CancellationToken.None); mqttClient.ConnectedHandler = new MQTTnet.Client.Connecting.MqttClientConnectedHandlerDelegate(e => { if (Subscriptions != null) { MakeSubscriptions(); } }); mqttClient.ApplicationMessageReceivedHandler = new MQTTnet.Client.Receiving.MqttApplicationMessageReceivedHandlerDelegate(e => { String msg = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload); var deserializedData = JsonConvert.DeserializeObject <EventData>(msg); deserializedData.Id = e.ApplicationMessage.Topic; foreach (var s in Subscriptions) { if (s.Value.EventId == deserializedData.Id) { var pointer = s.Value.FunctionPointer; var parameters = pointer.Method.GetParameters(); var parameterArrayForInvoke = new object[parameters.Length]; foreach (var eintrag in s.Value.IntegrationFlow) { int currentParameterCallIndex = 0; for (; currentParameterCallIndex < parameters.Length; currentParameterCallIndex++) { if (parameters[currentParameterCallIndex].Name == eintrag.Key) { var currentParameterCallType = pointer.Method.GetParameters()[currentParameterCallIndex].ParameterType; break; } } Object deserializedParameter = null; deserializedParameter = deserializedData.Data[eintrag.Value]; parameterArrayForInvoke[currentParameterCallIndex] = deserializedParameter; } pointer.DynamicInvoke(parameterArrayForInvoke); } } }); } catch { return(false); } return(true); }