Пример #1
0
 public ushort Publish(String Topic, String Message)
 {
     try
     {
         if (client.IsConnected == false || ((Queue)client.GetType().GetField("inflightQueue", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(client)).Count > 1)
         {
             this.connectInfinite();
             Debug.Print("MQTT Publish store in sd: " + Message);
             MeasureDB.addMeasure(Message);
             return(0);
         }
         //PublishOld(Topic, Message);
         Debug.Print("MQTT Publish" + Message);
         try
         {
             ushort retval = client.Publish(Topic, Encoding.UTF8.GetBytes(Message), MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE, false);
             pendingSend.Add(retval, Message);
             return(retval);
         }
         catch (Exception)
         {
             Debug.Print("MQTT Publish pending FAILED");
             MeasureDB.addMeasure(Message);
             //try { client.Disconnect();}catch (Exception) { };
             return(0);
         }
     }
     catch (Exception) {
         //Debug.Print(e.StackTrace);
         Debug.Print("MQTT Publish FAILED");
         return(0);
     }
 }
Пример #2
0
 void client_MqttMsgPublished(object sender, MqttMsgPublishedEventArgs e)
 {
     if (!e.IsPublished)
     {
         String message = (String)pendingSend[e.MessageId];
         if (message != null)
         {
             MeasureDB.addMeasure(message);
             pendingSend.Remove(e.MessageId);
         }
     }
     Debug.Print("MQTT Publish status:" + e.IsPublished + " message " + e.MessageId);
 }
Пример #3
0
        public ushort PublishOld(String Topic, String Message = null)
        {
            int inflight = ((Queue)client.GetType().GetField("inflightQueue", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(client)).Count;

            if (client.IsConnected == true && MeasureDB.hasPendingMeasure() && inflight <= 1)
            {
                count = 0;
                if (Topic.Equals("cfg"))
                {
                    return(0);
                }
                String pendingMessage = MeasureDB.firstPendingMeasure();
                try
                {
                    Debug.Print("MQTT pending message publishing...");
                    pendingSend.Add(client.Publish(Topic, Encoding.UTF8.GetBytes(pendingMessage), MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE, false), pendingMessage);
                    Debug.Print("MQTT pending message published");
                }
                catch (Exception)
                {
                    Debug.Print("MQTT Publish pending FAILED");
                    MeasureDB.addMeasure(pendingMessage);
                    if (Message != null)
                    {
                        MeasureDB.addMeasure(Message);
                    }
                    return(0);
                }
            }
            else if (client.IsConnected == true && MeasureDB.hasPendingMeasure() && inflight > 1 && count++ > 10)
            {
                this.client = newMqttClient();
                connectInfinite();
            }
            else
            {
                connectInfinite();
            }
            return(0);
        }