Fixed up MQTT connection code, made connection window hook up setup

debugging to the console if it is enabled.
This commit is contained in:
Collin Kidder
2021-06-15 22:12:43 -04:00
parent 8c41903f0f
commit 44a48b3515
2 changed files with 127 additions and 11 deletions
+13 -2
View File
@@ -254,7 +254,11 @@ void ConnectionWindow::handleNewConn()
newPort = thisDialog->getPortName();
newDriver = thisDialog->getDriverName();
conn = create(newType, newPort, newDriver);
if (conn) connModel->add(conn);
if (conn)
{
connModel->add(conn);
ui->tableConnections->setCurrentIndex(connModel->index(connModel->rowCount() - 1, 1));
}
}
delete thisDialog;
}
@@ -423,6 +427,9 @@ void ConnectionWindow::currentRowChanged(const QModelIndex &current, const QMode
CANConnection* conn_p = connModel->getAtIdx(selIdx);
if(!conn_p) return;
//because this might have already been setup during the initial setup so tear that one down and then create the normal one.
//disconnect(conn_p, SIGNAL(debugOutput(QString)), 0, 0);
numBuses = conn_p->getNumBuses();
int numB = ui->tabBuses->count();
for (int i = 0; i < numB; i++) ui->tabBuses->removeTab(0);
@@ -475,7 +482,11 @@ CANConnection* ConnectionWindow::create(CANCon::type pTye, QString pPortName, QS
/* connect signal */
connect(conn_p, SIGNAL(status(CANConStatus)),
this, SLOT(connectionStatus(CANConStatus)));
if (ui->ckEnableConsole->isChecked())
{
//set up the debug console to operate if we've selected it. Doing so here allows debugging right away during set up
connect(conn_p, SIGNAL(debugOutput(QString)), this, SLOT(getDebugText(QString)));
}
/*TODO add return value and checks */
conn_p->start();
}
+114 -9
View File
@@ -12,6 +12,7 @@ MQTT_BUS::MQTT_BUS(QString topicName) :
CANConnection(topicName, "mqtt_client", CANCon::MQTT, 1, 4000, true),
mTimer(this) /*NB: set this as parent of timer to manage it from working thread */
{
sendDebug("MQTT_BUS()");
crypto = new SimpleCrypt(Q_UINT64_C(0xdeadbeefface6285));
@@ -44,20 +45,32 @@ void MQTT_BUS::piStarted()
QSettings settings;
QString userName = settings.value("Remote/User", "Anonymous").toString();
QString host = settings.value("Remote/Host", "api.savvycan.com").toString();
int port = settings.value("Remote/Port", 8333).toInt();
int port = settings.value("Remote/Port", 8883).toInt();
QByteArray encPass = settings.value("Remote/Pass", "").toByteArray();
QByteArray password = crypto->decryptToByteArray(encPass);
QByteArray password;
if (encPass.length() > 0)
password = crypto->decryptToByteArray(encPass);
QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
mqttClient = new QMQTT::Client(host, port, sslConfig);
if (port == 8883)
{
QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
mqttClient = new QMQTT::Client(host, port, sslConfig);
}
else
{
QHostAddress hAddr = QHostInfo::fromName(host).addresses()[0];
sendDebug("IP Address of Host: " + hAddr.toString());
mqttClient = new QMQTT::Client(hAddr, port);
}
connect(mqttClient, &QMQTT::Client::connected, this, &MQTT_BUS::clientConnected);
connect(mqttClient, &QMQTT::Client::error, this, &MQTT_BUS::clientErrored);
//qDebug() << "User: " << userName << " Pass: " << password;
mqttClient->setClientId(genRandomClientID());
mqttClient->setUsername(userName);
mqttClient->setPassword(password);
if (userName.length() > 0) mqttClient->setUsername(userName);
if (password.length() > 0) mqttClient->setPassword(password);
sendDebug("Attempting to connect to MQTT.");
mqttClient->connectToHost();
}
@@ -67,7 +80,7 @@ QString MQTT_BUS::genRandomClientID()
{
QString output;
output.reserve(12);
QRandomGenerator gen;
QRandomGenerator gen = QRandomGenerator::securelySeeded();
for (int i = 0; i < 12; i++)
{
int val = gen.bounded(0, 62);
@@ -81,7 +94,99 @@ QString MQTT_BUS::genRandomClientID()
void MQTT_BUS::clientErrored(const QMQTT::ClientError error)
{
qDebug() << QString::number(error);
switch (error)
{
case QMQTT::UnknownError:
sendDebug("MQTT Unknown Error");
break;
case QMQTT::SocketConnectionRefusedError:
sendDebug("MQTT Connection Refused");
break;
case QMQTT::SocketRemoteHostClosedError:
sendDebug("MQTT Remote Host Closed The Connection");
break;
case QMQTT::SocketHostNotFoundError:
sendDebug("MQTT Remote Host Not Found");
break;
case QMQTT::SocketAccessError:
sendDebug("MQTT Socket Access Error");
break;
case QMQTT::SocketResourceError:
sendDebug("MQTT Resource Error");
break;
case QMQTT::SocketTimeoutError:
sendDebug("MQTT Timeout Error");
break;
case QMQTT::SocketDatagramTooLargeError:
sendDebug("MQTT Datagram too large");
break;
case QMQTT::SocketNetworkError:
sendDebug("MQTT Network Error");
break;
case QMQTT::SocketAddressInUseError:
sendDebug("MQTT Address In Use ERROR");
break;
case QMQTT::SocketAddressNotAvailableError:
sendDebug("MQTT Address Not Available");
break;
case QMQTT::SocketUnsupportedSocketOperationError:
sendDebug("MQTT Unsupported Operation");
break;
case QMQTT::SocketUnfinishedSocketOperationError:
sendDebug("MQTT Unfinished Socket Operation");
break;
case QMQTT::SocketProxyAuthenticationRequiredError:
sendDebug("MQTT Proxy Auth Required");
break;
case QMQTT::SocketSslHandshakeFailedError:
sendDebug("MQTT SSL Handshake Failure");
break;
case QMQTT::SocketProxyConnectionRefusedError:
sendDebug("MQTT Proxy Connection Refused");
break;
case QMQTT::SocketProxyConnectionClosedError:
sendDebug("MQTT Proxy Connection Closed");
break;
case QMQTT::SocketProxyConnectionTimeoutError:
sendDebug("MQTT Proxy Connection Timeout");
break;
case QMQTT::SocketProxyNotFoundError:
sendDebug("MQTT Proxy Not Found");
break;
case QMQTT::SocketProxyProtocolError:
sendDebug("MQTT Proxy Protocol Error");
break;
case QMQTT::SocketOperationError:
sendDebug("MQTT Socket Operation Error");
break;
case QMQTT::SocketSslInternalError:
sendDebug("MQTT SSL Internal Error");
break;
case QMQTT::SocketSslInvalidUserDataError:
sendDebug("MQTT SSL Invalid User Data");
break;
case QMQTT::SocketTemporaryError:
sendDebug("MQTT Temporary Error");
break;
case QMQTT::MqttUnacceptableProtocolVersionError:
sendDebug("MQTT Unaccepted Protocol Version");
break;
case QMQTT::MqttIdentifierRejectedError:
sendDebug("MQTT Identifier Rejected");
break;
case QMQTT::MqttServerUnavailableError:
sendDebug("MQTT Server Unavailable");
break;
case QMQTT::MqttBadUserNameOrPasswordError:
sendDebug("MQTT Bad Access Credentials");
break;
case QMQTT::MqttNotAuthorizedError:
sendDebug("MQTT Not Authorized");
break;
case QMQTT::MqttNoPingResponse:
sendDebug("MQTT No PING Response");
break;
}
}
void MQTT_BUS::piSuspend(bool pSuspend)
@@ -209,7 +314,7 @@ void MQTT_BUS::clientMessageReceived(const QMQTT::Message& message)
void MQTT_BUS::clientConnected()
{
sendDebug("Connecting to MQTT Broker!");
sendDebug("Connected to MQTT Broker!");
mqttClient->subscribe(topicName + "/+", 0); //subscribe to all sub topics to grab the frames.
connect(mqttClient, &QMQTT::Client::received, this, &MQTT_BUS::clientMessageReceived);