breaking change of ack callback, windows compile fix for PR

This commit is contained in:
melo.yao 2015-06-15 22:10:50 +08:00
parent 9e9d76c089
commit 7a3933e333
3 changed files with 23 additions and 21 deletions

View File

@ -11,6 +11,7 @@
#include <vector> #include <vector>
#include <map> #include <map>
#include <cassert> #include <cassert>
#include <type_traits>
namespace sio namespace sio
{ {
using namespace std; using namespace std;
@ -28,7 +29,7 @@ namespace sio
flag_object flag_object
}; };
virtual ~message() = default; virtual ~message(){};
class list; class list;
@ -261,6 +262,13 @@ namespace sio
m_vector(std::move(rhs.m_vector)) m_vector(std::move(rhs.m_vector))
{ {
}
template <typename T>
list(T&& content,
typename enable_if<is_same<vector<message::ptr>,typename remove_reference<T>::type>::value>::type* = 0):
m_vector(std::forward<T>(content))
{
} }
list(message::list const& rhs): list(message::list const& rhs):

View File

@ -131,7 +131,7 @@ namespace sio
void close(); void close();
void emit(std::string const& name, message::list const& msglist, std::function<void (message::ptr const&)> const& ack); void emit(std::string const& name, message::list const& msglist, std::function<void (message::list const&)> const& ack);
std::string const& get_namespace() const {return m_nsp;} std::string const& get_namespace() const {return m_nsp;}
@ -150,7 +150,7 @@ namespace sio
// Message Parsing callbacks. // Message Parsing callbacks.
void on_socketio_event(const std::string& nsp, int msgId,const std::string& name, message::list&& message); void on_socketio_event(const std::string& nsp, int msgId,const std::string& name, message::list&& message);
void on_socketio_ack(int msgId, message::ptr const& message); void on_socketio_ack(int msgId, message::list const& message);
void on_socketio_error(message::ptr const& err_message); void on_socketio_error(message::ptr const& err_message);
event_listener get_bind_listener_locked(string const& event); event_listener get_bind_listener_locked(string const& event);
@ -172,7 +172,7 @@ namespace sio
bool m_connected; bool m_connected;
std::string m_nsp; std::string m_nsp;
std::map<unsigned int, std::function<void (message::ptr const&)> > m_acks; std::map<unsigned int, std::function<void (message::list const&)> > m_acks;
std::map<std::string, event_listener> m_event_binding; std::map<std::string, event_listener> m_event_binding;
@ -243,7 +243,7 @@ namespace sio
unsigned int socket::impl::s_global_event_id = 1; unsigned int socket::impl::s_global_event_id = 1;
void socket::impl::emit(std::string const& name, message::list const& msglist, std::function<void (message::ptr const&)> const& ack) void socket::impl::emit(std::string const& name, message::list const& msglist, std::function<void (message::list const&)> const& ack)
{ {
NULL_GUARD(m_client); NULL_GUARD(m_client);
message::ptr msg_ptr = msglist.to_array_message(name); message::ptr msg_ptr = msglist.to_array_message(name);
@ -398,19 +398,13 @@ namespace sio
const message::ptr ptr = p.get_message(); const message::ptr ptr = p.get_message();
if(ptr->get_flag() == message::flag_array) if(ptr->get_flag() == message::flag_array)
{ {
const array_message* array_ptr = static_cast<const array_message*>(ptr.get()); message::list msglist(ptr->get_vector());
if(array_ptr->get_vector().size() >= 1&&array_ptr->get_vector()[0]->get_flag() == message::flag_string) this->on_socketio_ack(p.get_pack_id(),msglist);
{
message::ptr value_ptr;
if(array_ptr->get_vector().size()>1)
{
value_ptr = array_ptr->get_vector()[1];
}
this->on_socketio_ack(p.get_pack_id(), value_ptr);
break;
}
} }
this->on_socketio_ack(p.get_pack_id(),ptr); else
{
this->on_socketio_ack(p.get_pack_id(),message::list(ptr));
}
break; break;
} }
// Error // Error
@ -445,9 +439,9 @@ namespace sio
send_packet(p); send_packet(p);
} }
void socket::impl::on_socketio_ack(int msgId, message::ptr const& message) void socket::impl::on_socketio_ack(int msgId, message::list const& message)
{ {
std::function<void (message::ptr const&)> l; std::function<void (message::list const&)> l;
{ {
std::lock_guard<std::mutex> guard(m_event_mutex); std::lock_guard<std::mutex> guard(m_event_mutex);
auto it = m_acks.find(msgId); auto it = m_acks.find(msgId);
@ -551,7 +545,7 @@ namespace sio
m_impl->off_error(); m_impl->off_error();
} }
void socket::emit(std::string const& name, message::list const& msglist, std::function<void (message::ptr const&)> const& ack) void socket::emit(std::string const& name, message::list const& msglist, std::function<void (message::list const&)> const& ack)
{ {
m_impl->emit(name, msglist,ack); m_impl->emit(name, msglist,ack);
} }

View File

@ -70,7 +70,7 @@ namespace sio
void off_error(); void off_error();
void emit(std::string const& name, message::list const& msglist = nullptr, std::function<void (message::ptr const&)> const& ack = nullptr); void emit(std::string const& name, message::list const& msglist = nullptr, std::function<void (message::list const&)> const& ack = nullptr);
std::string const& get_namespace() const; std::string const& get_namespace() const;