/// <summary>
 /// disconnect event handler
 /// </summary>
 /// <param name="e"></param>
 private void DisconnectHandler(MqttClientDisconnectedEventArgs e)
 {
     if (MqttClientDisconnectReason.NormalDisconnection == e.ReasonCode)
     {
         ActiveMQ_MQTT_Settings.Trace(m_strConsumerClientID + " disconnect ActiveMQ normally.");
     }
     else
     {
         ActiveMQ_MQTT_Settings.Trace(m_strConsumerClientID + " disconnect ActiveMQ with error code: " + e.ReasonCode.ToString());
     }
     Reconnect();
 }
 /// <summary>
 /// connect event handler
 /// </summary>
 /// <param name="e"></param>
 private void ConnectHandler(MqttClientConnectedEventArgs e)
 {
     if (MqttClientConnectResultCode.Success == e.AuthenticateResult.ResultCode)
     {
         ActiveMQ_MQTT_Settings.Trace(m_strProducerClientID + " Connect ActiveMQ success.");
     }
     else
     {
         ActiveMQ_MQTT_Settings.Trace(m_strProducerClientID + "Connect ActiveMQ failed, error code: " + e.AuthenticateResult.ResultCode.ToString());
         Reconnect();
     }
 }
 /// <summary>
 /// reconnect
 /// </summary>
 private void Reconnect()
 {
     if (!m_mqttConsumer.IsConnected)
     {
         IMqttClientOptions mqttClientOptions = new MqttClientOptionsBuilder()
                                                .WithClientId(m_strConsumerClientID)
                                                .WithTcpServer(ActiveMQ_MQTT_Settings.s_strBrokerName, ActiveMQ_MQTT_Settings.s_nBrokerPort)
                                                .Build();
         m_mqttConsumer.ConnectAsync(mqttClientOptions, CancellationToken.None);
         ActiveMQ_MQTT_Settings.Trace(m_strConsumerClientID + " Reconnecting.");
         Thread.Sleep(3000);
     }
 }
 /// <summary>
 /// connect event handler
 /// </summary>
 /// <param name="e"></param>
 private void ConnectHandler(MqttClientConnectedEventArgs e)
 {
     if (MqttClientConnectResultCode.Success == e.AuthenticateResult.ResultCode)
     {
         ActiveMQ_MQTT_Settings.Trace(m_strConsumerClientID + " Connect ActiveMQ success.");
         MqttTopicFilter mqttTopicFilter = new MqttTopicFilterBuilder()
                                           .WithTopic(ActiveMQ_MQTT_Settings.s_strTopic)
                                           .WithExactlyOnceQoS()
                                           .Build();
         m_mqttConsumer.SubscribeAsync(mqttTopicFilter);
     }
     else
     {
         ActiveMQ_MQTT_Settings.Trace(m_strConsumerClientID + "Connect ActiveMQ failed, error code: " + e.AuthenticateResult.ResultCode.ToString());
         Reconnect();
     }
 }
 /// <summary>
 /// publish message to the topic
 /// </summary>
 private void ConsumeMessage()
 {
     while (true)
     {
         if (m_mqttConsumer.IsConnected && (!m_queueConsumeMsg.IsEmpty))
         {
             ConsumeMessageInfo oConsumeMessageInfo;
             if (m_queueConsumeMsg.TryDequeue(out oConsumeMessageInfo))
             {
                 ActiveMQ_MQTT_Settings.Trace(m_strConsumerClientID + "<<< Received topic content: [" +
                                              System.Text.Encoding.ASCII.GetString(oConsumeMessageInfo.Content) +
                                              "]");
             }
         }
         else
         {
             Thread.Sleep(1000);
         }
     }
 }
 /// <summary>
 /// publish message to the topic
 /// </summary>
 private void PublishMessage()
 {
     while (true)
     {
         if (m_mqttProducer.IsConnected)
         {
             string strMessage = m_strProducerClientID + " produced message " + m_nMesssageSequenceNumber.ToString();
             m_nMesssageSequenceNumber = ((0 != (m_nMesssageSequenceNumber % int.MaxValue)) ? (++m_nMesssageSequenceNumber) : 0);
             MqttApplicationMessage mqttMessage = new MqttApplicationMessageBuilder()
                                                  .WithTopic(ActiveMQ_MQTT_Settings.s_strTopic)
                                                  .WithPayload(strMessage)
                                                  .WithExactlyOnceQoS()
                                                  .Build();
             m_mqttProducer.PublishAsync(mqttMessage, CancellationToken.None);
             ActiveMQ_MQTT_Settings.Trace(m_strProducerClientID + ">>> Published topic content: [" + strMessage + "]");
             Thread.Sleep(100);
         }
         else
         {
             Thread.Sleep(1000);
         }
     }
 }