Fixed up MQTT connection code, made connection window hook up setup
debugging to the console if it is enabled.
This commit is contained in:
@@ -254,7 +254,11 @@ void ConnectionWindow::handleNewConn()
|
|||||||
newPort = thisDialog->getPortName();
|
newPort = thisDialog->getPortName();
|
||||||
newDriver = thisDialog->getDriverName();
|
newDriver = thisDialog->getDriverName();
|
||||||
conn = create(newType, newPort, newDriver);
|
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;
|
delete thisDialog;
|
||||||
}
|
}
|
||||||
@@ -423,6 +427,9 @@ void ConnectionWindow::currentRowChanged(const QModelIndex ¤t, const QMode
|
|||||||
CANConnection* conn_p = connModel->getAtIdx(selIdx);
|
CANConnection* conn_p = connModel->getAtIdx(selIdx);
|
||||||
if(!conn_p) return;
|
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();
|
numBuses = conn_p->getNumBuses();
|
||||||
int numB = ui->tabBuses->count();
|
int numB = ui->tabBuses->count();
|
||||||
for (int i = 0; i < numB; i++) ui->tabBuses->removeTab(0);
|
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 signal */
|
||||||
connect(conn_p, SIGNAL(status(CANConStatus)),
|
connect(conn_p, SIGNAL(status(CANConStatus)),
|
||||||
this, SLOT(connectionStatus(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 */
|
/*TODO add return value and checks */
|
||||||
conn_p->start();
|
conn_p->start();
|
||||||
}
|
}
|
||||||
|
|||||||
+112
-7
@@ -12,6 +12,7 @@ MQTT_BUS::MQTT_BUS(QString topicName) :
|
|||||||
CANConnection(topicName, "mqtt_client", CANCon::MQTT, 1, 4000, true),
|
CANConnection(topicName, "mqtt_client", CANCon::MQTT, 1, 4000, true),
|
||||||
mTimer(this) /*NB: set this as parent of timer to manage it from working thread */
|
mTimer(this) /*NB: set this as parent of timer to manage it from working thread */
|
||||||
{
|
{
|
||||||
|
|
||||||
sendDebug("MQTT_BUS()");
|
sendDebug("MQTT_BUS()");
|
||||||
|
|
||||||
crypto = new SimpleCrypt(Q_UINT64_C(0xdeadbeefface6285));
|
crypto = new SimpleCrypt(Q_UINT64_C(0xdeadbeefface6285));
|
||||||
@@ -44,20 +45,32 @@ void MQTT_BUS::piStarted()
|
|||||||
QSettings settings;
|
QSettings settings;
|
||||||
QString userName = settings.value("Remote/User", "Anonymous").toString();
|
QString userName = settings.value("Remote/User", "Anonymous").toString();
|
||||||
QString host = settings.value("Remote/Host", "api.savvycan.com").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 encPass = settings.value("Remote/Pass", "").toByteArray();
|
||||||
QByteArray password = crypto->decryptToByteArray(encPass);
|
QByteArray password;
|
||||||
|
if (encPass.length() > 0)
|
||||||
|
password = crypto->decryptToByteArray(encPass);
|
||||||
|
|
||||||
|
if (port == 8883)
|
||||||
|
{
|
||||||
QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
|
QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
|
||||||
mqttClient = new QMQTT::Client(host, port, sslConfig);
|
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::connected, this, &MQTT_BUS::clientConnected);
|
||||||
connect(mqttClient, &QMQTT::Client::error, this, &MQTT_BUS::clientErrored);
|
connect(mqttClient, &QMQTT::Client::error, this, &MQTT_BUS::clientErrored);
|
||||||
|
|
||||||
//qDebug() << "User: " << userName << " Pass: " << password;
|
//qDebug() << "User: " << userName << " Pass: " << password;
|
||||||
mqttClient->setClientId(genRandomClientID());
|
mqttClient->setClientId(genRandomClientID());
|
||||||
mqttClient->setUsername(userName);
|
if (userName.length() > 0) mqttClient->setUsername(userName);
|
||||||
mqttClient->setPassword(password);
|
if (password.length() > 0) mqttClient->setPassword(password);
|
||||||
|
sendDebug("Attempting to connect to MQTT.");
|
||||||
mqttClient->connectToHost();
|
mqttClient->connectToHost();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +80,7 @@ QString MQTT_BUS::genRandomClientID()
|
|||||||
{
|
{
|
||||||
QString output;
|
QString output;
|
||||||
output.reserve(12);
|
output.reserve(12);
|
||||||
QRandomGenerator gen;
|
QRandomGenerator gen = QRandomGenerator::securelySeeded();
|
||||||
for (int i = 0; i < 12; i++)
|
for (int i = 0; i < 12; i++)
|
||||||
{
|
{
|
||||||
int val = gen.bounded(0, 62);
|
int val = gen.bounded(0, 62);
|
||||||
@@ -81,7 +94,99 @@ QString MQTT_BUS::genRandomClientID()
|
|||||||
|
|
||||||
void MQTT_BUS::clientErrored(const QMQTT::ClientError error)
|
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)
|
void MQTT_BUS::piSuspend(bool pSuspend)
|
||||||
@@ -209,7 +314,7 @@ void MQTT_BUS::clientMessageReceived(const QMQTT::Message& message)
|
|||||||
|
|
||||||
void MQTT_BUS::clientConnected()
|
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.
|
mqttClient->subscribe(topicName + "/+", 0); //subscribe to all sub topics to grab the frames.
|
||||||
connect(mqttClient, &QMQTT::Client::received, this, &MQTT_BUS::clientMessageReceived);
|
connect(mqttClient, &QMQTT::Client::received, this, &MQTT_BUS::clientMessageReceived);
|
||||||
|
|||||||
Reference in New Issue
Block a user