diff options
-rw-r--r-- | client-qt/udm-client-qt/client_session.cpp | 13 | ||||
-rw-r--r-- | client-qt/udm-client-qt/client_session.h | 5 | ||||
-rw-r--r-- | client-qt/udm-client-qt/connect_widget.cpp | 39 | ||||
-rw-r--r-- | client-qt/udm-client-qt/connect_widget.h | 16 | ||||
-rw-r--r-- | client-qt/udm-client-qt/udm_main.cpp | 8 | ||||
-rw-r--r-- | client-qt/udm-client-qt/udm_main.h | 4 | ||||
-rw-r--r-- | protocol/udm.proto | 11 |
7 files changed, 85 insertions, 11 deletions
diff --git a/client-qt/udm-client-qt/client_session.cpp b/client-qt/udm-client-qt/client_session.cpp index 60f462c..c034aa1 100644 --- a/client-qt/udm-client-qt/client_session.cpp +++ b/client-qt/udm-client-qt/client_session.cpp @@ -59,9 +59,10 @@ tcp::socket& client_session::socket() return socket_; } -void client_session::client_connect(QString host, int port) +void client_session::client_connect(QString host, QString password, int port) { //TODO: settings for connection timeout + this->pasword = password; boost::asio::ip::tcp::resolver r(io_service_); boost::asio::ip::tcp::endpoint ep; ep.port(port); @@ -77,6 +78,7 @@ void client_session::handle_connect(const boost::system::error_code &e) //TODO: settings for reconnect count and timeout emit client_connected(false, QString::fromStdString(e.message())); BOOST_LOG_TRIVIAL(error)<<__FILE__<<":"<<__LINE__<<"\t"<<typeid(this).name()<<"::"<<__func__<<"\terror: "<<e.message(); + delete this; //suicide } else { @@ -159,6 +161,15 @@ void client_session::run_io_service() io_service_.run(); } +client_session::~client_session() +{ + //TODO: check this, reimplement + io_service_.stop(); + boost::asio::io_service *s = &io_service_; + delete s; + emit terminate_thread(); +} + /*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 192d15b..df75640 100644 --- a/client-qt/udm-client-qt/client_session.h +++ b/client-qt/udm-client-qt/client_session.h @@ -40,6 +40,7 @@ class client_session : public QObject Q_OBJECT public: explicit client_session(QObject *parent = 0, boost::asio::io_service *io_service = nullptr); + ~client_session(); // boost::asio::io_service &io_service(); tcp::socket& socket(); @@ -47,9 +48,10 @@ public: signals: void client_connected(bool success, QString error_text); //we are in threads, no links here void server_message_received(server_msg msg); //we are in threads, no links here + void terminate_thread(); public slots: - void client_connect(QString host, int port); + void client_connect(QString host, QString password, int port); void run_io_service(); void send_message(client_msg &msg); @@ -60,6 +62,7 @@ private: char *recv_data_; boost::asio::io_service &io_service_; tcp::socket socket_; + QString pasword; }; #endif // CLIENT_SESSION_H diff --git a/client-qt/udm-client-qt/connect_widget.cpp b/client-qt/udm-client-qt/connect_widget.cpp index ad171cf..a33c49b 100644 --- a/client-qt/udm-client-qt/connect_widget.cpp +++ b/client-qt/udm-client-qt/connect_widget.cpp @@ -21,9 +21,48 @@ #include "connect_widget.h" +#include <QLineEdit> +#include <QGridLayout> +#include <QLabel> +#include <QPushButton> +#include <QSpacerItem> connect_widget::connect_widget(QWidget *parent) : QWidget(parent) { + edit_host = new QLineEdit(this), edit_port = new QLineEdit(this), edit_passwd = new QLineEdit(this); + lbl_host = new QLabel(tr("host") + ":", this); + lbl_port = new QLabel(tr("port") + ":", this); + lbl_passwd = new QLabel(tr("password") + ":", this); + btn_connect = new QPushButton(tr("Connect"), this); + btn_close = new QPushButton(tr("Close"), this); + edit_host->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + edit_port->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + edit_passwd->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); + elements_grid = new QGridLayout(this); + elements_grid->addWidget(lbl_host, 0, 0); + elements_grid->addWidget(edit_host, 0, 1); + elements_grid->addWidget(lbl_port, 0, 2); + elements_grid->addWidget(edit_port, 0, 3); + elements_grid->addWidget(lbl_passwd, 1, 0); + elements_grid->addWidget(edit_passwd, 1, 1, 1, 2); + spacer_h = new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + elements_grid->addItem(spacer_h, 2, 0, 1, 4); + elements_grid->addWidget(btn_connect, 3, 0, 1, 2); + elements_grid->addWidget(btn_close, 3, 2, 1, 2); + connect(btn_connect, SIGNAL(clicked(bool)), this, SLOT(connect_clicked())); +} + +connect_widget::~connect_widget() +{ + edit_host->deleteLater(); + edit_port->deleteLater(); + elements_grid->deleteLater(); } +void connect_widget::connect_clicked() +{ + //TODO: check entered values + QString host = edit_host->text(), pass = edit_passwd->text(); + emit client_connect(host, pass, edit_port->text().toInt()); +} diff --git a/client-qt/udm-client-qt/connect_widget.h b/client-qt/udm-client-qt/connect_widget.h index d8c93ad..9b2470b 100644 --- a/client-qt/udm-client-qt/connect_widget.h +++ b/client-qt/udm-client-qt/connect_widget.h @@ -24,19 +24,31 @@ #include <QWidget> -class client_session; -class QThread; +class QLineEdit; +class QGridLayout; +class QLabel; +class QPushButton; +class QSpacerItem; class connect_widget : public QWidget { Q_OBJECT public: explicit connect_widget(QWidget *parent = 0); + ~connect_widget(); signals: + void client_connect(QString &host, QString &password, int port); public slots: + void connect_clicked(); private: + QLineEdit *edit_host, *edit_port, *edit_passwd; + QGridLayout *elements_grid; + QLabel *lbl_host, *lbl_port, *lbl_passwd; + QPushButton *btn_connect, *btn_close; + QSpacerItem *spacer_h; + }; #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 103f8b7..02c0f9a 100644 --- a/client-qt/udm-client-qt/udm_main.cpp +++ b/client-qt/udm-client-qt/udm_main.cpp @@ -42,20 +42,22 @@ udm_main::~udm_main() void udm_main::show_connect_widget() { connect_widget *w = new connect_widget; + connect(w, SIGNAL(client_connect(QString&,QString&,int)), this, SLOT(client_connect(QString&,QString&,int))); //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) +void udm_main::client_connect(QString &host, QString &password, 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(connect_signal(QString,QString,int)), session, SLOT(client_connect(QString,QString,int))); connect(this, SIGNAL(run_client_io_loop()), session, SLOT(run_io_service())); + connect(session, SIGNAL(terminate_thread()), thread_client_session, SLOT(terminate())); session->moveToThread(thread_client_session); thread_client_session->start(); - emit connect_signal(host, port); + emit connect_signal(host, password, 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 7dae3f1..af8c7a7 100644 --- a/client-qt/udm-client-qt/udm_main.h +++ b/client-qt/udm-client-qt/udm_main.h @@ -45,9 +45,9 @@ public: ~udm_main(); public slots: void show_connect_widget(); - void client_connect(QString &host, int port); + void client_connect(QString &host, QString &password, int port); signals: - void connect_signal(QString host, int port); + void connect_signal(QString host, QString password, int port); void run_client_io_loop(); private: QThread *thread_client_session; diff --git a/protocol/udm.proto b/protocol/udm.proto index f762a46..adbae08 100644 --- a/protocol/udm.proto +++ b/protocol/udm.proto @@ -117,9 +117,16 @@ message module_info //auth proto part begin +enum PASSWD_HASH_TYPE { + HASH_NONE = 0; + HASH_MD5 = 1; + HASH_SHA2 = 2; + HASH_SHA512 = 3; +} + message client_auth_info { - required string login = 1; - required string password = 2; + required string password = 1; + optional PASSWD_HASH_TYPE type = 2 [default = HASH_NONE]; } message server_auth_info { |