コード例 #1
0
ファイル: Program.cs プロジェクト: EriclLee/MqttDotNet
 bool client_PublishArrived(object sender, PublishArrivedArgs e)
 {
     Console.WriteLine("Received Message");
     Console.WriteLine("Topic: " + e.Topic);
     Console.WriteLine("Payload: " + e.Payload);
     Console.WriteLine();
     return true;
 }
コード例 #2
0
        protected void OnPublishArrived(MqttPublishMessage m)
        {
            bool accepted = false;

            if (PublishArrived != null)
            {
                PublishArrivedArgs e = new PublishArrivedArgs(m.Topic, m.Payload, m.Retained, m.QualityOfService);
                try
                {
                    accepted |= PublishArrived(this, e);
                }
                catch (Exception ex)
                {
                    MqttLib.Logger.Log.Write(LogLevel.ERROR, "MqttLib: Uncaught exception from user delegate: " + ex.ToString());
                }
            }

            if (topicTree != null)
            {
                PublishArrivedArgs            e           = new PublishArrivedArgs(m.Topic, m.Payload, m.Retained, m.QualityOfService);
                List <PublishArrivedDelegate> subscribers = topicTree.CollectMatches(new Topic(m.Topic));
                foreach (PublishArrivedDelegate pad in subscribers)
                {
                    try
                    {
                        accepted |= pad(this, e);
                    }
                    catch (Exception ex)
                    {
                        MqttLib.Logger.Log.Write(LogLevel.ERROR, "MqttLib: Uncaught exception from user delegate: " + ex.ToString());
                    }
                }
            }

            if (m.QualityOfService > QoS.BestEfforts)
            {
                qosManager.PublishAccepted(m.MessageID, accepted);
            }
        }
コード例 #3
0
ファイル: Mqtt.cs プロジェクト: mlinnen/MqttDotNet
        protected void OnPublishArrived(MqttPublishMessage m)
        {
            bool accepted = false;

            if (PublishArrived != null)
            {
                PublishArrivedArgs e = new PublishArrivedArgs(m.Topic, m.Payload, m.Retained, m.QualityOfService);
                try
                {
                  accepted |= PublishArrived(this, e);
                }
                catch(Exception ex)
                {
                  MqttLib.Logger.Log.Write(LogLevel.ERROR, "MqttLib: Uncaught exception from user delegate: " + ex.ToString());
                }
            }

            if (topicTree != null)
            {
                PublishArrivedArgs e = new PublishArrivedArgs(m.Topic, m.Payload, m.Retained, m.QualityOfService);
                List<PublishArrivedDelegate> subscribers = topicTree.CollectMatches(new Topic(m.Topic));
                foreach (PublishArrivedDelegate pad in subscribers)
                {
                  try
                  {
                    accepted |= pad(this, e);
                  }
                  catch (Exception ex)
                  {
                    MqttLib.Logger.Log.Write(LogLevel.ERROR, "MqttLib: Uncaught exception from user delegate: " + ex.ToString());
                  }
                }
            }

            if (m.QualityOfService > QoS.BestEfforts)
            {
              qosManager.PublishAccepted(m.MessageID, accepted);
            }
        }
コード例 #4
0
ファイル: MqttAdaptor.cs プロジェクト: fingerpasswang/Phial
        private bool OnReceived(object sender, PublishArrivedArgs ea)
        {
            Log.Info("Received Message");
            Log.Info("Topic: " + ea.Topic);
            Log.Info("MqttAdaptor.OnReceived, topic={0}", ea.Topic);

            var topic = ea.Topic.Split('/');
            var sid = topic[1];
            var mode = MetaData.GetMode(topic[2]);
            var toQuery = mode == Mode.Return ? delegates : implements;
            IMessageConsumer msgConsumer;

            if (toQuery.TryGetValue(sid, out msgConsumer))
            {
                var job = new DefferedJob()
                {
                    Buffer = (byte[])ea.Payload.TrimmedBuffer.Clone(),
                    Mode = mode,
                    MessageConsumer = msgConsumer,
                };

                lock (defferedJobs)
                {
                    defferedJobs.Enqueue(job);
                }
            }

            return true;
        }
コード例 #5
0
 private bool _mqttClient_PublishArrived(object sender, PublishArrivedArgs e)
 {
     InvokeOnMainThread(() =>
     {
         lblReceivedMessage.Text = e.Payload.ToString();
     });
     return true;
 }
コード例 #6
0
        bool _client_PublishArrived(object sender, PublishArrivedArgs e)
        {
            if (e!=null && !string.IsNullOrEmpty(e.Topic))
            {
                // Is this a ping request
                if (e.Topic.EndsWith("/ping"))
                {
                    // Route the ping response back to the originator
                    _client.Publish(e.Topic.Replace("/ping", "/pingresp"), new MqttPayload(e.Payload), QoS.BestEfforts, false);
                }

                // Look for changes in the MQTT Client connections and send it to the browser
                if (e.Topic.Contains("$SYS/broker/clients/active"))
                {
                    int count = 0;
                    if (int.TryParse(e.Payload, out count))
                        SendConnectedMQTTClients(count);
                }

                CommandEventArgs args = CommandEventArgs.BuildCommandArgs(e.Topic, e.Payload);
                if (args != null)
                {
                    // Only allow 1 thread to update the state of the security system at one time
                    lock (_myLock)
                    {
                        _securitySystem.ProcessCommand(args);
                    }
                }

            }
            return true;
        }