Ejemplo n.º 1
0
        public void Disconnect()
        {
            if (m_Decoder != null)
            {
                m_Decoder.MessageDecoded -= DecoderOnMessageDecoded;
                m_Decoder.Stop();
            }

            if (m_MqttClient != null)
            {
                if (m_MqttClient.IsConnected)
                {
                    //m_MqttClient.UnsubscribeAsync(Settings.Client.ClientCertP12).Wait();
                    m_MqttClient.ApplicationMessageReceivedHandler = null;
                    m_MqttClient.DisconnectedHandler = null;
                }

                try
                {
                    m_MqttClient.DisconnectAsync()
                    .Wait(TimeSpan.FromSeconds(5));
                }
                catch (TaskCanceledException) { }   //don't know why this happens always...
                finally
                {
                    m_MqttClient.Dispose();
                }
            }

            m_DecoderTask?.Wait();
            m_MessageQueue = null;
            m_Decoder      = null;

            if (m_DecoderTask != null)
            {
                m_DecoderTask.Dispose();
                m_DecoderTask = null;
            }

            m_MqttClient = null;

            ClientDisconnected?.Invoke(this, "");
        }