• mqttnet封装


    客户端基

    /// <summary>
        /// 
        /// </summary>
        public class BaseClient : IDisposable
        {
            protected string client;
            protected int port;
            protected string username;
            protected string password;
            protected IMqttClient mqttClient;
    
            protected bool needPassword = false;
    
            public BaseClient(string client, int port = 1883)
            {
                this.client = client;
                this.port = port;
            }
    
            public BaseClient(string client, int port = 1883, string username = "admin", string password = "public")
            {
                this.client = client;
                this.port = port;
                this.username = username;
                this.password = password;
                needPassword = true;
            }
    
            public BaseClient Connect()
            {
                MqttFactory mqttFactory = new MqttFactory();
    
                mqttClient = mqttFactory.CreateMqttClient();
                MqttClientOptions mqttClientOptions = new MqttClientOptionsBuilder()
                       .WithTcpServer(client, port)
                       .Build();
    
                if (needPassword)
                {
                    mqttClientOptions.Credentials = new MqttClientCredentials(username, Encoding.Default.GetBytes(password));
                }
    
                mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None).Wait();
                return this;
            }
    
            public void DisConnect()
            {
                mqttClient.DisconnectAsync().Wait();
            }
            public void Dispose()
            {
                if (mqttClient == null)
                {
                    return;
                }
    
                if (mqttClient.IsConnected)
                {
                    mqttClient.DisconnectAsync().Wait();
                }
                mqttClient.Dispose();
            }
        }
    

    消费者

    public class MQTTClientSubscribe : BaseClient, IDisposable
        {
            MqttFactory mqttFactory = new MqttFactory();
    
            public MQTTClientSubscribe(string client, int port = 1883, string username = "admin", string password = "public") : base(client, port, username, password)
            {
            }
    
    
            public MQTTClientSubscribe(string server, int port = 1883) : base(server, port)
            {
                
            }
    
            public void InvokeReceived(Action action)
            {
                mqttClient.ApplicationMessageReceivedAsync += e =>
                {
                    System.Console.WriteLine("Received application message:" + e.ApplicationMessage.ConvertPayloadToString());
                    e.DumpToConsole();
    
                    e.ApplicationMessage.ConvertPayloadToString();
    
                    action?.Invoke();
    
                    return Task.CompletedTask;
                };
            }
    
            public void SubscribeTopic(string topic)
            {
                MqttClientSubscribeOptions mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder()
                    .WithTopicFilter(f => { f.WithTopic(topic); })
                    .Build();
    
    
                mqttClient.SubscribeAsync(mqttSubscribeOptions, CancellationToken.None).Wait();
            }
        }
    

    生产者

    public class MQTTClientPublish : BaseClient, IDisposable
        {
    
            public MQTTClientPublish(string client, int port = 1883) : base(client, port)
            {
    
            }
    
            public MQTTClientPublish(string client, int port = 1883, string username = "admin", string password = "public") : base(client, port, username, password)
            {
            }
    
            /// <summary>
            /// 发送数据
            /// </summary>
            /// <param name="topic"></param>
            /// <param name="data"></param>
            /// <returns></returns>
            public void PublishMessage(string topic, string data)
            {
                MqttApplicationMessage applicationMessage = new MqttApplicationMessageBuilder()
                    .WithTopic(topic)
                    .WithPayload(data)
                    .Build();
    
                mqttClient.PublishAsync(applicationMessage, CancellationToken.None).Wait();
            }
        }
    
  • 相关阅读:
    删除表中存在多条相同记录的方法
    .Net与设计模式之笔记一
    再来一个莫名其妙的错误(asp.net)
    水晶报表的5种表格设计模式(转)
    【web标准设计】学习、提高、欣赏网站推荐
    UML 对象模型图阅读指南 (转)
    attachEvent传递给其handler的一个默认参数
    ASP.NET2.0 在head中添加了代码块后出现的问题
    js技巧转义符"\"的妙用(转)
    VSS新建项目后导致项目组成员不能打开解决方案的解决方法
  • 原文地址:https://www.cnblogs.com/ives/p/16404559.html
Copyright © 2020-2023  润新知