diff options
-rw-r--r-- | client-qt/udm-client-qt/client_session.cpp | 14 | ||||
-rw-r--r-- | client-qt/udm-client-qt/client_session.h | 4 | ||||
-rw-r--r-- | client-qt/udm-client-qt/connect_widget.h | 4 | ||||
-rw-r--r-- | client-qt/udm-client-qt/udm_main.cpp | 16 | ||||
-rw-r--r-- | client-qt/udm-client-qt/udm_main.h | 18 |
5 files changed, 53 insertions, 3 deletions
diff --git a/client-qt/udm-client-qt/client_session.cpp b/client-qt/udm-client-qt/client_session.cpp index 65406bf..56eb88d 100644 --- a/client-qt/udm-client-qt/client_session.cpp +++ b/client-qt/udm-client-qt/client_session.cpp @@ -34,13 +34,13 @@ tcp::socket& client_session::socket() return socket_; } -void client_session::connect(std::string &host, int port) +void client_session::client_connect(QString host, int port) { //TODO: settings for connection timeout boost::asio::ip::tcp::resolver r(io_service_); boost::asio::ip::tcp::endpoint ep; ep.port(port); - ep.address(boost::asio::ip::address::from_string(host)); + ep.address(boost::asio::ip::address::from_string(host.toStdString())); socket_.async_connect(ep, boost::bind(&client_session::connect_handler, this, boost::asio::placeholders::error)); } @@ -57,3 +57,13 @@ void client_session::connect_handler(const boost::system::error_code &e) //TODO: succesfule connection event } } + +void client_session::run_io_service() +{ + io_service_.run(); +} + +/*boost::asio::io_service &client_session::io_service() +{ + return io_service_; +} */ diff --git a/client-qt/udm-client-qt/client_session.h b/client-qt/udm-client-qt/client_session.h index b8e4ef1..f13e96d 100644 --- a/client-qt/udm-client-qt/client_session.h +++ b/client-qt/udm-client-qt/client_session.h @@ -37,13 +37,15 @@ class client_session : public QObject Q_OBJECT public: explicit client_session(QObject *parent = 0, boost::asio::io_service *io_service = nullptr); +// boost::asio::io_service &io_service(); tcp::socket& socket(); signals: public slots: - void connect(std::string &host, int port); + void client_connect(QString host, int port); + void run_io_service(); private: void connect_handler(const boost::system::error_code &error); char *recv_data_; diff --git a/client-qt/udm-client-qt/connect_widget.h b/client-qt/udm-client-qt/connect_widget.h index ca0b9be..288eb95 100644 --- a/client-qt/udm-client-qt/connect_widget.h +++ b/client-qt/udm-client-qt/connect_widget.h @@ -3,6 +3,9 @@ #include <QWidget> +class client_session; +class QThread; + class connect_widget : public QWidget { Q_OBJECT @@ -12,6 +15,7 @@ public: signals: public slots: +private: }; #endif // CONNECT_WIDGET_H diff --git a/client-qt/udm-client-qt/udm_main.cpp b/client-qt/udm-client-qt/udm_main.cpp index 8d9bb0c..103f8b7 100644 --- a/client-qt/udm-client-qt/udm_main.cpp +++ b/client-qt/udm-client-qt/udm_main.cpp @@ -21,8 +21,10 @@ #include "udm_main.h" #include <QMenuBar> +#include <QThread> #include "connect_widget.h" +#include "client_session.h" udm_main::udm_main(QWidget *parent) : QMainWindow(parent) @@ -41,5 +43,19 @@ void udm_main::show_connect_widget() { connect_widget *w = new connect_widget; //TODO: make connection to other slots related to connection + //TODO: destroy widget on close w->show(); } + +void udm_main::client_connect(QString &host, int port) +{ + thread_client_session = new QThread(this); + io_service_ = new boost::asio::io_service; + session = new client_session(0, io_service_); //parent must be 0 here + connect(this, SIGNAL(connect_signal(QString,int)), session, SLOT(client_connect(QString,int))); + connect(this, SIGNAL(run_client_io_loop()), session, SLOT(run_io_service())); + session->moveToThread(thread_client_session); + thread_client_session->start(); + emit connect_signal(host, port); + emit run_client_io_loop(); +} diff --git a/client-qt/udm-client-qt/udm_main.h b/client-qt/udm-client-qt/udm_main.h index 162bc30..7dae3f1 100644 --- a/client-qt/udm-client-qt/udm_main.h +++ b/client-qt/udm-client-qt/udm_main.h @@ -25,6 +25,16 @@ #include <QMainWindow> +class client_session; + +namespace boost { +namespace asio { + +class io_service; + +} +} + class udm_main : public QMainWindow { @@ -35,7 +45,15 @@ public: ~udm_main(); public slots: void show_connect_widget(); + void client_connect(QString &host, int port); +signals: + void connect_signal(QString host, int port); + void run_client_io_loop(); private: + QThread *thread_client_session; + client_session *session; + boost::asio::io_service *io_service_; + }; #endif // UDM_MAIN_H |