/// <summary> /// Publish a message asynchronously /// </summary> /// <param name="topic">Message topic</param> /// <param name="message">Message data (payload)</param> /// <param name="qosLevel">QoS Level</param> /// <param name="retain">Retain flag</param> /// <returns>Message Id related to PUBLISH message</returns> public static ushort Publish(MqttClientConnection clientConnection, string topic, byte[] message, byte qosLevel, bool retain) { MqttMsgPublish publish = new MqttMsgPublish(topic, message, false, qosLevel, retain); publish.MessageId = clientConnection.GetMessageId(); // enqueue message to publish into the inflight queue EnqueueInflight(clientConnection, publish, MqttMsgFlow.ToPublish); return(publish.MessageId); }