Skip to content

Commit 0b0f265

Browse files
committed
add varialbe args support in event callback.
1 parent 3440d58 commit 0b0f265

File tree

4 files changed

+57
-16
lines changed

4 files changed

+57
-16
lines changed

src/sio_message.h

+17
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,18 @@ namespace sio
240240
{
241241
}
242242

243+
list(message::list&& rhs):
244+
m_vector(std::move(rhs.m_vector))
245+
{
246+
247+
}
248+
249+
list(message::list const& rhs):
250+
m_vector(rhs.m_vector)
251+
{
252+
253+
}
254+
243255
list(message::ptr const& message)
244256
{
245257
if(message)
@@ -285,6 +297,11 @@ namespace sio
285297
return m_vector[i];
286298
}
287299

300+
const message::ptr& operator[] (size_t i) const
301+
{
302+
return m_vector[i];
303+
}
304+
288305
message::ptr to_array_message(string const& event_name) const
289306
{
290307
message::ptr arr = array_message::create();

src/sio_socket.cpp

+32-11
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace sio
3030
return std::bind(&event_adapter::adapt_func, func,std::placeholders::_1);
3131
}
3232

33-
static inline event create_event(std::string const& nsp,std::string const& name,message::ptr const& message,bool need_ack)
33+
static inline event create_event(std::string const& nsp,std::string const& name,message::list&& message,bool need_ack)
3434
{
3535
return event(nsp,name,message,need_ack);
3636
}
@@ -51,7 +51,19 @@ namespace sio
5151
inline
5252
const message::ptr& event::get_message() const
5353
{
54-
return m_message;
54+
if(m_messages.size()>0)
55+
return m_messages[0];
56+
else
57+
{
58+
static message::ptr null_ptr;
59+
return null_ptr;
60+
}
61+
}
62+
63+
inline
64+
const message::list& event::get_messages() const
65+
{
66+
return m_messages;
5567
}
5668

5769
inline
@@ -68,10 +80,19 @@ namespace sio
6880
}
6981

7082
inline
71-
event::event(std::string const& nsp,std::string const& name,message::ptr const& message,bool need_ack):
83+
event::event(std::string const& nsp,std::string const& name,message::list&& messages,bool need_ack):
7284
m_nsp(nsp),
7385
m_name(name),
74-
m_message(message),
86+
m_messages(std::move(messages)),
87+
m_need_ack(need_ack)
88+
{
89+
}
90+
91+
inline
92+
event::event(std::string const& nsp,std::string const& name,message::list const& messages,bool need_ack):
93+
m_nsp(nsp),
94+
m_name(name),
95+
m_messages(messages),
7596
m_need_ack(need_ack)
7697
{
7798
}
@@ -133,7 +154,7 @@ namespace sio
133154
private:
134155

135156
// Message Parsing callbacks.
136-
void on_socketio_event(const std::string& nsp, int msgId,const std::string& name, message::ptr const& message);
157+
void on_socketio_event(const std::string& nsp, int msgId,const std::string& name, message::list&& message);
137158
void on_socketio_ack(int msgId, message::ptr const& message);
138159
void on_socketio_error(message::ptr const& err_message);
139160

@@ -359,12 +380,12 @@ namespace sio
359380
if(array_ptr->get_vector().size() >= 1&&array_ptr->get_vector()[0]->get_flag() == message::flag_string)
360381
{
361382
const string_message* name_ptr = static_cast<const string_message*>(array_ptr->get_vector()[0].get());
362-
message::ptr value_ptr;
363-
if(array_ptr->get_vector().size()>1)
383+
message::list mlist;
384+
for(size_t i = 1;i<array_ptr->get_vector().size();++i)
364385
{
365-
value_ptr = array_ptr->get_vector()[1];
386+
mlist.push(array_ptr->get_vector()[i]);
366387
}
367-
this->on_socketio_event(p.get_nsp(), p.get_pack_id(),name_ptr->get_string(), value_ptr);
388+
this->on_socketio_event(p.get_nsp(), p.get_pack_id(),name_ptr->get_string(), std::move(mlist));
368389
}
369390
}
370391

@@ -406,10 +427,10 @@ namespace sio
406427
}
407428
}
408429

409-
void socket::impl::on_socketio_event(const std::string& nsp,int msgId,const std::string& name, message::ptr const& message)
430+
void socket::impl::on_socketio_event(const std::string& nsp,int msgId,const std::string& name, message::list && message)
410431
{
411432
bool needAck = msgId >= 0;
412-
event ev = event_adapter::create_event(nsp,name, message,needAck);
433+
event ev = event_adapter::create_event(nsp,name, std::move(message),needAck);
413434
event_listener func = this->get_bind_listener_locked(name);
414435
if(func)func(ev);
415436
if(needAck)

src/sio_socket.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ namespace sio
1414
const std::string& get_name() const;
1515

1616
const message::ptr& get_message() const;
17+
18+
const message::list& get_messages() const;
1719

1820
bool need_ack() const;
1921

@@ -22,14 +24,15 @@ namespace sio
2224
message::ptr const& get_ack_message() const;
2325

2426
protected:
25-
event(std::string const& nsp,std::string const& name,message::ptr const& message,bool need_ack);
26-
27+
event(std::string const& nsp,std::string const& name,message::list const& messages,bool need_ack);
28+
event(std::string const& nsp,std::string const& name,message::list&& messages,bool need_ack);
29+
2730
message::ptr& get_ack_message_impl();
2831

2932
private:
3033
const std::string m_nsp;
3134
const std::string m_name;
32-
const message::ptr m_message;
35+
const message::list m_messages;
3336
const bool m_need_ack;
3437
message::ptr m_ack_message;
3538

test/sio_test.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ BOOST_AUTO_TEST_CASE( test_packet_accept_4 )
107107
std::string json = payload.substr(json_start);
108108
nlohmann::json j = nlohmann::json::parse(json);
109109
BOOST_CHECK_MESSAGE(j["desc"].get<std::string>() == "Bin of 100 bytes", std::string("outputing payload desc:") + j["desc"].get<std::string>());
110-
BOOST_CHECK_MESSAGE(j["bin1"]["_placeholder"] == true , std::string("outputing payload bin1:") + j["bin1"].dump());
111-
BOOST_CHECK_MESSAGE(j["bin2"]["_placeholder"] == true , std::string("outputing payload bin2:") + j["bin2"].dump());
110+
BOOST_CHECK_MESSAGE((bool)j["bin1"]["_placeholder"] , std::string("outputing payload bin1:") + j["bin1"].dump());
111+
BOOST_CHECK_MESSAGE((bool)j["bin2"]["_placeholder"] , std::string("outputing payload bin2:") + j["bin2"].dump());
112112
int bin1Num = j["bin1"]["num"].get<int>();
113113
char numchar[] = {0,0};
114114
numchar[0] = bin1Num+'0';

0 commit comments

Comments
 (0)