public async Task <MQTTConnectResult> ConnectAsync(bool ssl = false) { try { _mqttClient = new MqttClient(_channel); _mqttClient.Init(BrokerHostName, BrokerPort, false); _mqttClient.ConnectionClosed += MqttClient_ConnectionClosed; _mqttClient.MqttMsgPublished += MqttClient_MqttMsgPublished; _mqttClient.MqttMsgSubscribed += MqttClient_MqttMsgSubscribed; _mqttClient.MqttMsgPublishReceived += MqttClient_MqttMsgArrived; var result = await _mqttClient.Connect(ClientId, UserName, Password); if (ConnectionStateChanged != null && result == ConnAck.Accepted) { ConnectionStateChanged(this, true); } return(new MQTTConnectResult(ConnAck.Accepted)); } catch (MqttCommunicationException ex) { LogException("MQTTClient-Connect", ex); return(new MQTTConnectResult(ConnAck.Exception, ex.Message)); } catch (MqttConnectionException ex) { return(new MQTTConnectResult(ConnAck.ServerUnavailable, ex.Message)); } catch (MqttClientException ex) { return(new MQTTConnectResult(ConnAck.Exception, ex.Message)); } catch (Exception ex) { LogException("MQTTClient-Connect", ex); return(new MQTTConnectResult(ConnAck.Exception, ex.Message)); } }