Skip to content

Commit 12f02ac

Browse files
committed
update QT tutorial for new interfaces
1 parent 2d6427c commit 12f02ac

File tree

2 files changed

+36
-31
lines changed

2 files changed

+36
-31
lines changed

examples/QT/README.md

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,9 @@ private:
180180
std::unique_ptr<client> _io;
181181
```
182182

183-
Init `sio::client` and setup event bindings in `MainWindow` constructor.
183+
Init `sio::client` and setup event bindings for default `socket` in `MainWindow` constructor.
184+
185+
And we also need to handle the connectivity events, handle the connect and disconnect events.
184186

185187
Now the `MainWindow` constructor:
186188

@@ -195,30 +197,34 @@ MainWindow::MainWindow(QWidget *parent) :
195197
using std::placeholders::_2;
196198
using std::placeholders::_3;
197199
using std::placeholders::_4;
198-
_io->bind_event("new message",std::bind(&MainWindow::OnNewMessage,this,_1,_2,_3,_4));
199-
_io->bind_event("user joined",std::bind(&MainWindow::OnUserJoined,this,_1,_2,_3,_4));
200-
_io->bind_event("user left",std::bind(&MainWindow::OnUserLeft,this,_1,_2,_3,_4));
201-
_io->bind_event("typing",std::bind(&MainWindow::OnTyping,this,_1,_2,_3,_4));
202-
_io->bind_event("stop typing",std::bind(&MainWindow::OnStopTyping,this,_1,_2,_3,_4));
203-
_io->bind_event("login",std::bind(&MainWindow::OnLogin,this,_1,_2,_3,_4));
204-
_io->set_connect_listener(std::bind(&MainWindow::OnConnected,this));
205-
_io->set_fail_listener(std::bind(&MainWindow::OnFailed,this));
200+
socket::ptr sock = _io->socket();
201+
sock->on("new message",std::bind(&MainWindow::OnNewMessage,this,_1,_2,_3,_4));
202+
sock->on("user joined",std::bind(&MainWindow::OnUserJoined,this,_1,_2,_3,_4));
203+
sock->on("user left",std::bind(&MainWindow::OnUserLeft,this,_1,_2,_3,_4));
204+
sock->on("typing",std::bind(&MainWindow::OnTyping,this,_1,_2,_3,_4));
205+
sock->on("stop typing",std::bind(&MainWindow::OnStopTyping,this,_1,_2,_3,_4));
206+
sock->on("login",std::bind(&MainWindow::OnLogin,this,_1,_2,_3,_4));
207+
//default socket opened, also we have "set_open_listener" for monitoring physical connection opened.
208+
_io->set_socket_open_listener(std::bind(&MainWindow::OnConnected,this,std::placeholders::_1));
209+
//physical connection closed or drop.
206210
_io->set_close_listener(std::bind(&MainWindow::OnClosed,this,_1));
211+
//physical connection fail to establish.
212+
_io->set_fail_listener(std::bind(&MainWindow::OnFailed,this));
207213
connect(this,SIGNAL(RequestAddListItem(QListWidgetItem*)),this,SLOT(AddListItem(QListWidgetItem*)));
208214
}
209215
```
210216
211217
###Managing connection state
212218
We have several connection listeners for connection events.
213219
214-
First we want to send login message once we're connected.
220+
First we want to send login message once we're connected, get the default `socket` from `client` to do that.
215221
216222
```C++
217223
void MainWindow::OnConnected()
218224
{
219225
QByteArray bytes = m_name.toUtf8();
220226
std::string nickName(bytes.data(),bytes.length());
221-
_io->emit("add user", nickName);
227+
_io->socket()->emit("add user", nickName);
222228
}
223229
```
224230

@@ -244,8 +250,8 @@ the `sio::client` object will be destruct by `unique_ptr`
244250
```C++
245251
MainWindow::~MainWindow()
246252
{
247-
_io->clear_event_bindings();
248-
_io->clear_con_listeners();
253+
_io->socket()->off_all();
254+
_io->socket()->off_error();
249255
delete ui;
250256
}
251257
```
@@ -285,7 +291,7 @@ void MainWindow::SendBtnClicked()
285291
{
286292
QByteArray bytes = text.toUtf8();
287293
std::string msg(bytes.data(),bytes.length());
288-
_io->emit("new message",msg);//emit new message
294+
_io->socket()->emit("new message",msg);//emit new message
289295
text.append(":You");
290296
QListWidgetItem *item = new QListWidgetItem(text);
291297
item->setTextAlignment(Qt::AlignRight);

examples/QT/SioChatDemo/mainwindow.cpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,24 @@ MainWindow::MainWindow(QWidget *parent) :
2222
m_dialog()
2323
{
2424
ui->setupUi(this);
25+
26+
using std::placeholders::_1;
27+
using std::placeholders::_2;
28+
using std::placeholders::_3;
29+
using std::placeholders::_4;
30+
socket::ptr sock = _io->socket();
31+
BIND_EVENT(sock,"new message",std::bind(&MainWindow::OnNewMessage,this,_1,_2,_3,_4));
32+
BIND_EVENT(sock,"user joined",std::bind(&MainWindow::OnUserJoined,this,_1,_2,_3,_4));
33+
BIND_EVENT(sock,"user left",std::bind(&MainWindow::OnUserLeft,this,_1,_2,_3,_4));
34+
BIND_EVENT(sock,"typing",std::bind(&MainWindow::OnTyping,this,_1,_2,_3,_4));
35+
BIND_EVENT(sock,"stop typing",std::bind(&MainWindow::OnStopTyping,this,_1,_2,_3,_4));
36+
BIND_EVENT(sock,"login",std::bind(&MainWindow::OnLogin,this,_1,_2,_3,_4));
37+
_io->set_socket_open_listener(std::bind(&MainWindow::OnConnected,this,std::placeholders::_1));
38+
_io->set_close_listener(std::bind(&MainWindow::OnClosed,this,_1));
39+
_io->set_fail_listener(std::bind(&MainWindow::OnFailed,this));
40+
2541
connect(this,SIGNAL(RequestAddListItem(QListWidgetItem*)),this,SLOT(AddListItem(QListWidgetItem*)));
2642
connect(this,SIGNAL(RequestToggleInputs(bool)),this,SLOT(ToggleInputs(bool)));
27-
_io->set_socket_open_listener(std::bind(&MainWindow::OnConnected,this,std::placeholders::_1));
28-
_io->set_socket_close_listener(std::bind(&MainWindow::OnFailed,this));
2943
}
3044

3145
MainWindow::~MainWindow()
@@ -98,17 +112,6 @@ void MainWindow::NicknameAccept()
98112
m_name = m_dialog->getNickname();
99113
if(m_name.length()>0)
100114
{
101-
using std::placeholders::_1;
102-
using std::placeholders::_2;
103-
using std::placeholders::_3;
104-
using std::placeholders::_4;
105-
socket::ptr sock = _io->socket();
106-
BIND_EVENT(sock,"new message",std::bind(&MainWindow::OnNewMessage,this,_1,_2,_3,_4));
107-
BIND_EVENT(sock,"user joined",std::bind(&MainWindow::OnUserJoined,this,_1,_2,_3,_4));
108-
BIND_EVENT(sock,"user left",std::bind(&MainWindow::OnUserLeft,this,_1,_2,_3,_4));
109-
BIND_EVENT(sock,"typing",std::bind(&MainWindow::OnTyping,this,_1,_2,_3,_4));
110-
BIND_EVENT(sock,"stop typing",std::bind(&MainWindow::OnStopTyping,this,_1,_2,_3,_4));
111-
BIND_EVENT(sock,"login",std::bind(&MainWindow::OnLogin,this,_1,_2,_3,_4));
112115
_io->connect("ws://localhost:3000");
113116
}
114117
}
@@ -253,16 +256,12 @@ void MainWindow::ToggleInputs(bool loginOrNot)
253256
this->findChild<QWidget*>("messageEdit")->setEnabled(true);
254257
this->findChild<QWidget*>("listView")->setEnabled(true);
255258
this->findChild<QWidget*>("sendBtn")->setEnabled(true);
256-
// this->findChild<QWidget*>("nickNameEdit")->setEnabled(false);
257-
// this->findChild<QWidget*>("loginBtn")->setEnabled(false);
258259
}
259260
else
260261
{
261262
this->findChild<QWidget*>("messageEdit")->setEnabled(false);
262263
this->findChild<QWidget*>("listView")->setEnabled(false);
263264
this->findChild<QWidget*>("sendBtn")->setEnabled(false);
264-
// this->findChild<QWidget*>("nickNameEdit")->setEnabled(true);
265-
// this->findChild<QWidget*>("loginBtn")->setEnabled(true);
266265
ShowLoginDialog();
267266
}
268267
}

0 commit comments

Comments
 (0)