@@ -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
185187Now 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
212218We 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++
217223void 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++
245251MainWindow::~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);
0 commit comments