From 991f31bc771b0271492fe6ff9931a49b6e1073cb Mon Sep 17 00:00:00 2001 From: "michal.szwaj" Date: Thu, 22 Mar 2018 17:12:37 +0100 Subject: [PATCH] Handle invalid IP address --- .../f1x/openauto/autoapp/UI/ConnectDialog.hpp | 5 ++- src/autoapp/UI/ConnectDialog.cpp | 37 ++++++++++++------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/include/f1x/openauto/autoapp/UI/ConnectDialog.hpp b/include/f1x/openauto/autoapp/UI/ConnectDialog.hpp index a1d348b..fe654ca 100644 --- a/include/f1x/openauto/autoapp/UI/ConnectDialog.hpp +++ b/include/f1x/openauto/autoapp/UI/ConnectDialog.hpp @@ -28,13 +28,14 @@ public: signals: void connectToDevice(const QString& ipAddress); void connectionSucceed(aasdk::tcp::ITCPEndpoint::SocketPointer socket); - void connectionFailed(); + void connectionFailed(const QString& message); private slots: void onConnectButtonClicked(); - void onConnectionFailed(); + void onConnectionFailed(const QString& message); void onConnectionSucceed(); void setControlsEnabledStatus(bool status); + void connectHandler(const boost::system::error_code& ec, aasdk::tcp::ITCPEndpoint::SocketPointer socket); private: boost::asio::io_service& ioService_; diff --git a/src/autoapp/UI/ConnectDialog.cpp b/src/autoapp/UI/ConnectDialog.cpp index 9849052..69a2e02 100644 --- a/src/autoapp/UI/ConnectDialog.cpp +++ b/src/autoapp/UI/ConnectDialog.cpp @@ -37,17 +37,28 @@ void ConnectDialog::onConnectButtonClicked() const auto& ipAddress = ui_->lineEditIPAddress->text().toStdString(); auto socket = std::make_shared(ioService_); - tcpWrapper_.asyncConnect(*socket, ipAddress, 5277, [this, socket](auto ec) mutable { - if(!ec) - { - emit connectionSucceed(std::move(socket)); - this->close(); - } - else - { - emit connectionFailed(); - } - }); + + try + { + tcpWrapper_.asyncConnect(*socket, ipAddress, 5277, std::bind(&ConnectDialog::connectHandler, this, std::placeholders::_1, socket)); + } + catch(const boost::system::system_error& se) + { + emit connectionFailed(QString(se.what())); + } +} + +void ConnectDialog::connectHandler(const boost::system::error_code& ec, aasdk::tcp::ITCPEndpoint::SocketPointer socket) +{ + if(!ec) + { + emit connectionSucceed(std::move(socket)); + this->close(); + } + else + { + emit connectionFailed(QString::fromStdString(ec.message())); + } } void ConnectDialog::onConnectionSucceed() @@ -55,11 +66,11 @@ void ConnectDialog::onConnectionSucceed() this->setControlsEnabledStatus(true); } -void ConnectDialog::onConnectionFailed() +void ConnectDialog::onConnectionFailed(const QString& message) { this->setControlsEnabledStatus(true); - QMessageBox errorMessage(QMessageBox::Critical, "Error", "Connection failed.", QMessageBox::Ok); + QMessageBox errorMessage(QMessageBox::Critical, "Connect error", message, QMessageBox::Ok); errorMessage.setWindowFlags(Qt::WindowStaysOnTopHint); errorMessage.exec(); }