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); } }
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); }
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); }