Пример #1
0
        private async void StartMqttServer()
        {
            var mqttServer = new MQTTnet.MqttFactory().CreateMqttServer();

            var optionsBuilder = new MqttServerOptionsBuilder()
                                 .WithConnectionBacklog(100)
                                 .WithDefaultEndpointPort(1883);

            mqttServer.ClientConnected    += MqttServer_ClientConnected;
            mqttServer.ClientDisconnected += MqttServer_ClientDisconnected;


            await mqttServer.StartAsync(optionsBuilder.Build());
        }
Пример #2
0
        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);
        }