C# M2Mqtt封装类

最近由于自己使用到M2MQTT,在网上综合了一些教程后自己完善了一个封装类。

具体用法见代码

using System;

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using uPLibrary.Networking.M2Mqtt.Messages;


namespace uPLibrary.Networking.M2Mqtt
{
    public class MqttClientService
    {
        private static volatile MqttClientService _instance = null;


        private static readonly object LockHelper = new object();

        ///
        /// 创建单例模式
        ///

        ///
        ///
        public static MqttClientService CreateInstance(string ipAddress,string topic)
        {
            if (_instance == null)
            {
                lock (LockHelper)
                {
                    if (_instance == null)
                        _instance = new MqttClientService(ipAddress, topic);
                }
            }
            return _instance;
        }


        public static MqttClientService getInstance()
        {
            return _instance;
        }


        ///
        /// 实例化订阅客户端
        ///

        public MqttClient SubscribeClient { get; set; }


        public MqttClientService(string ipAddress, string topic)
        {
            int brokerPort = 8883;
            //string clientId = Guid.NewGuid().ToString();
            string clientId = "666";
            //string username = "zzinno";
            string username = "xxx";//输入用户名
            string password = "xxxxxxxxx";//输入
            // create client instance 
 
            try
            {
                SubscribeClient = new MqttClient(ipAddress, brokerPort, true, null, null, MqttSslProtocols.TLSv1_2);


                // register to message received 
               // SubscribeClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;


                //注册链接断开事件
                SubscribeClient.ConnectionClosed += ConnectionClosed;


                //SubscribeClient.Connect(clientId);
                SubscribeClient.Connect(clientId, username, password);


                // subscribe to the topic "/home/temperature" with QoS 2 
                SubscribeClient.Subscribe(new string[] {topic}, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE});
                Console.WriteLine("主题订阅成功");
            }catch(Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("连接失败!");
                Console.ReadKey();
            }
        }


        private void ConnectionClosed(object sender, EventArgs e)
        {
            MessageBox.Show("与服务器连接断开,请检查您的网络");
        }


        public void client_MqttMsgPublish(string publishString)
        {
            SubscribeClient.Publish("1/class/1", Encoding.UTF8.GetBytes(publishString), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, true);
        }

//最重要的方法,填入参数为接受到信息后调用的方法,使用添加方法在不同的进程中也能进行调用
        public void AddClient_MqttMsgPublishReceivedAction(Actionaction)
        {
            SubscribeClient.MqttMsgPublishReceived += new MqttClient.MqttMsgPublishEventHandler(action);
        }
    }
}

你可能感兴趣的:(C#Debug记录)