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