From c39efcb91499287e62cd5cc6fabe6bece02408a4 Mon Sep 17 00:00:00 2001 From: melode11 Date: Tue, 7 Apr 2015 14:49:38 +0800 Subject: [PATCH 1/2] fix a initial value bug --- src/sio_socket.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sio_socket.cpp b/src/sio_socket.cpp index 1858c09..1b3cb17 100644 --- a/src/sio_socket.cpp +++ b/src/sio_socket.cpp @@ -217,7 +217,10 @@ void set_##__FIELD__(__TYPE__ const& l) \ m_error_listener = nullptr; } - socket::impl::impl(client_impl *client,std::string const& nsp):m_client(client),m_nsp(nsp) + socket::impl::impl(client_impl *client,std::string const& nsp): + m_client(client), + m_nsp(nsp), + m_connected(false) { NULL_GUARD(client); if(m_client->opened()) From 2d6427ceea7c2ba39d1ba8a5c5ff95ec6b55f546 Mon Sep 17 00:00:00 2001 From: melode11 Date: Tue, 7 Apr 2015 14:59:32 +0800 Subject: [PATCH 2/2] update demos for new interfaces --- examples/QT/SioChatDemo/mainwindow.cpp | 9 ++-- examples/QT/SioChatDemo/mainwindow.h | 2 +- .../SioChatDemo/CRViewController.mm | 48 +++++++++++-------- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/examples/QT/SioChatDemo/mainwindow.cpp b/examples/QT/SioChatDemo/mainwindow.cpp index f1eed8e..aeee164 100644 --- a/examples/QT/SioChatDemo/mainwindow.cpp +++ b/examples/QT/SioChatDemo/mainwindow.cpp @@ -24,12 +24,14 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); connect(this,SIGNAL(RequestAddListItem(QListWidgetItem*)),this,SLOT(AddListItem(QListWidgetItem*))); connect(this,SIGNAL(RequestToggleInputs(bool)),this,SLOT(ToggleInputs(bool))); + _io->set_socket_open_listener(std::bind(&MainWindow::OnConnected,this,std::placeholders::_1)); + _io->set_socket_close_listener(std::bind(&MainWindow::OnFailed,this)); } MainWindow::~MainWindow() { _io->socket()->off_all(); - _io->socket()->clear_listeners(); + _io->socket()->off_error(); delete ui; } @@ -107,9 +109,6 @@ void MainWindow::NicknameAccept() BIND_EVENT(sock,"typing",std::bind(&MainWindow::OnTyping,this,_1,_2,_3,_4)); BIND_EVENT(sock,"stop typing",std::bind(&MainWindow::OnStopTyping,this,_1,_2,_3,_4)); BIND_EVENT(sock,"login",std::bind(&MainWindow::OnLogin,this,_1,_2,_3,_4)); - sock->set_connect_listener(std::bind(&MainWindow::OnConnected,this)); - - sock->set_close_listener(std::bind(&MainWindow::OnFailed,this)); _io->connect("ws://localhost:3000"); } } @@ -230,7 +229,7 @@ void MainWindow::OnLogin(std::string const& name,message::ptr const& data,bool h Q_EMIT RequestAddListItem(item); } -void MainWindow::OnConnected() +void MainWindow::OnConnected(std::string const& nsp) { QByteArray bytes = m_name.toUtf8(); std::string nickName(bytes.data(),bytes.length()); diff --git a/examples/QT/SioChatDemo/mainwindow.h b/examples/QT/SioChatDemo/mainwindow.h index ef5287f..d96e372 100644 --- a/examples/QT/SioChatDemo/mainwindow.h +++ b/examples/QT/SioChatDemo/mainwindow.h @@ -45,7 +45,7 @@ private: void OnTyping(std::string const& name,message::ptr const& data,bool hasAck,message::ptr &ack_resp); void OnStopTyping(std::string const& name,message::ptr const& data,bool hasAck,message::ptr &ack_resp); void OnLogin(std::string const& name,message::ptr const& data,bool hasAck,message::ptr &ack_resp); - void OnConnected(); + void OnConnected(std::string const& nsp); void OnClosed(client::close_reason const& reason); void OnFailed(); void ShowLoginDialog(); diff --git a/examples/iOS/SioChatDemo/SioChatDemo/CRViewController.mm b/examples/iOS/SioChatDemo/SioChatDemo/CRViewController.mm index cd0532b..3b45442 100644 --- a/examples/iOS/SioChatDemo/SioChatDemo/CRViewController.mm +++ b/examples/iOS/SioChatDemo/SioChatDemo/CRViewController.mm @@ -31,6 +31,7 @@ typedef enum MessageFlag NSMutableSet *_typingUsers; NSString* _name; NSInteger _userCount; + NSTimer* _inputTimer; } @property (weak, nonatomic) IBOutlet UILabel *infoLabel; @property (weak, nonatomic) IBOutlet UILabel *typingLabel; @@ -139,7 +140,7 @@ void OnLogin(CFTypeRef ctrl, string const& name, sio::message::ptr const& data, } } -void OnConnected(CFTypeRef ctrl) +void OnConnected(CFTypeRef ctrl,std::string nsp) { dispatch_async(dispatch_get_main_queue(), ^{ [((__bridge CRViewController*)ctrl) onConnected]; @@ -181,6 +182,7 @@ void OnClose(CFTypeRef ctrl,sio::client::close_reason const& reason) -(void)viewWillAppear:(BOOL)animated { + _io->set_socket_open_listener(std::bind(&OnConnected, (__bridge CFTypeRef)self,std::placeholders::_1)); _io->set_close_listener(std::bind(&OnClose, (__bridge CFTypeRef)self, std::placeholders::_1)); _io->set_fail_listener(std::bind(&OnFailed, (__bridge CFTypeRef)self)); } @@ -204,8 +206,8 @@ void OnClose(CFTypeRef ctrl,sio::client::close_reason const& reason) -(void)viewDidDisappear:(BOOL)animated { _io->socket()->off_all(); - _io->socket()->set_connect_listener(nullptr); - _io->socket()->set_close_listener(nullptr); + _io->set_open_listener(nullptr); + _io->set_close_listener(nullptr); _io->close(); } @@ -336,6 +338,29 @@ void OnClose(CFTypeRef ctrl,sio::client::close_reason const& reason) } } +-(void) inputTimeout +{ + _inputTimer = nil; + _io->socket()->emit("stop typing", ""); +} + +-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + if(textField == self.messageField) + { + if(_inputTimer.valid) + { + [_inputTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; + } + else + { + _io->socket()->emit("typing", ""); + _inputTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(inputTimeout) userInfo:nil repeats:NO]; + } + } + return YES; +} + - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [_receivedMessage count]; @@ -375,22 +400,6 @@ void OnClose(CFTypeRef ctrl,sio::client::close_reason const& reason) } } --(void)textFieldDidBeginEditing:(UITextField *)textField -{ - if(textField == self.messageField) - { - _io->socket()->emit("typing", ""); - } -} - --(void)textFieldDidEndEditing:(UITextField *)textField -{ - if(textField == self.messageField) - { - _io->socket()->emit("stop typing", ""); - } -} - -(BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField == self.nickName) { @@ -401,7 +410,6 @@ void OnClose(CFTypeRef ctrl,sio::client::close_reason const& reason) using std::placeholders::_3; using std::placeholders::_4; socket::ptr socket = _io->socket(); - socket->set_connect_listener(std::bind(&OnConnected, (__bridge CFTypeRef)self)); socket->on("new message", std::bind(&OnNewMessage, (__bridge CFTypeRef)self, _1,_2,_3,_4)); socket->on("typing", std::bind(&OnTyping, (__bridge CFTypeRef)self, _1,_2,_3,_4));