示例#1
0
        /// <summary>
        /// 发送消息到远程端并等待返回
        /// </summary>
        /// <param name="topic">主题</param>
        /// <param name="api">api</param>
        /// <param name="body">内容</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message> SendAsync(SingleTopic topic, Api api, ITimeoutRequest body)
        {
            var message    = EmqttdClient.GenerateMessage(api, body, Mode.Send);
            var key        = message.GetUniqueKey(topic.UniqueId);
            var timeout    = TimeSpan.FromSeconds(body.Timeout);
            var taskSetter = taskTable.Create <Message>(key, timeout);

            await EmqttdClient.PublishAsync(topic, message);

            return(await taskSetter.GetTask());
        }
示例#2
0
        /// <summary>
        /// 初始化mqtt客户端
        /// </summary>
        /// <returns></returns>
        private async static Task InitMqttClientAsync()
        {
            using (await asyncRoot.LockAsync())
            {
                if (_mqttClientInstance != null)
                {
                    return;
                }

                var userName = EmqttdClient.GetSubAccout();
                var password = config.Subscribe.Password;

                await MqttAcl.AuthAclAsync(userName, password);

                await MqttAcl.AuthAclAsync(config.Publish.Account, config.Publish.Password);

                _mqttClientInstance = new MqttClient(config.Subscribe.Address, userName);
                _mqttClientInstance.OnMessageArrived += EmqttdClient.OnMqttClientReturn;
                _mqttClientInstance.OnConnectionLost += mqttClient_OnConnectionLost;
                var option = new ConnectOption
                {
                    Username = userName,
                    Password = password,
                };

                try
                {
                    Logger.Info("IIS_MQTT", "Connect " + option.ToDebugString());
                    await _mqttClientInstance.ConnectAsync(option);

                    Logger.Info("IIS_MQTT", "Connect OK ...");
                    await _mqttClientInstance.SubscribeAsync(mqTopic, MqttQoS.ExactlyOnce);
                }
                catch (Exception ex)
                {
                    Logger.Error("IIS_MQTT", ex.ToString());
                    Logger.Exception(ex);
                    throw ex;
                }
            }
        }
示例#3
0
 /// <summary>
 /// 回复消息到远程端
 /// </summary>
 /// <param name="topic">主题</param>
 /// <param name="api">api</param>
 /// <param name="body">内容</param>
 /// <returns></returns>
 public static async Task ReturnAsync(SingleTopic topic, Api api, object body)
 {
     var message = GenerateMessage(api, body, Mode.Return);
     await EmqttdClient.PublishAsync(topic, message);
 }
示例#4
0
 /// <summary>
 /// 投递消息到远程端
 /// </summary>
 /// <param name="topic">主题</param>
 /// <param name="api">api</param>
 /// <param name="body">内容</param>
 /// <returns></returns>
 public static async Task PostAsync(Topic topic, Api api, object body)
 {
     var message = EmqttdClient.GenerateMessage(api, body, Mode.Post);
     await EmqttdClient.PublishAsync(topic, message);
 }