summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client-qt/udm-client-qt/client_session.cpp14
-rw-r--r--client-qt/udm-client-qt/client_session.h4
-rw-r--r--client-qt/udm-client-qt/connect_widget.h4
-rw-r--r--client-qt/udm-client-qt/udm_main.cpp16
-rw-r--r--client-qt/udm-client-qt/udm_main.h18
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