Commit 5e602a8b authored by Dominik Charousset's avatar Dominik Charousset

fixed serialization of synchronous messages

parent 77435f95
...@@ -293,10 +293,26 @@ class po_peer : public po_socket_handler { ...@@ -293,10 +293,26 @@ class po_peer : public po_socket_handler {
if ((whom) && (ptr)) whom->local_unlink_from(ptr); if ((whom) && (ptr)) whom->local_unlink_from(ptr);
}, },
others() >> [&]() { others() >> [&]() {
if (msg.receiver()) { auto receiver = msg.receiver().get();
msg.receiver()->enqueue(msg.sender().get(), if (receiver) {
if (msg.id().valid()) {
auto ra = dynamic_cast<actor*>(receiver);
if (ra) {
ra->sync_enqueue(
msg.sender().get(),
msg.id(),
std::move(msg.content())); std::move(msg.content()));
} }
else{
DEBUG("sync message to a non-actor");
}
}
else {
receiver->enqueue(
msg.sender().get(),
std::move(msg.content()));
}
}
else { else {
DEBUG("empty receiver"); DEBUG("empty receiver");
} }
......
...@@ -461,6 +461,7 @@ class addr_msg_tinfo : public util::abstract_uniform_type_info<addressed_message ...@@ -461,6 +461,7 @@ class addr_msg_tinfo : public util::abstract_uniform_type_info<addressed_message
actor_ptr_name, actor_ptr_name,
group_ptr_name); group_ptr_name);
any_tuple_tinfo::s_serialize(data, sink, any_tuple_name); any_tuple_tinfo::s_serialize(data, sink, any_tuple_name);
sink->write_value(msg.id().integer_value());
sink->end_object(); sink->end_object();
} }
...@@ -469,9 +470,6 @@ class addr_msg_tinfo : public util::abstract_uniform_type_info<addressed_message ...@@ -469,9 +470,6 @@ class addr_msg_tinfo : public util::abstract_uniform_type_info<addressed_message
if (tname != name()) throw 42; if (tname != name()) throw 42;
source->begin_object(tname); source->begin_object(tname);
auto& msg = *reinterpret_cast<addressed_message*>(instance); auto& msg = *reinterpret_cast<addressed_message*>(instance);
//actor_ptr sender;
//channel_ptr receiver;
//any_tuple content;
actor_ptr_tinfo::s_deserialize(msg.sender(), source, actor_ptr_name); actor_ptr_tinfo::s_deserialize(msg.sender(), source, actor_ptr_name);
channel_ptr_tinfo::s_deserialize(msg.receiver(), channel_ptr_tinfo::s_deserialize(msg.receiver(),
source, source,
...@@ -479,10 +477,9 @@ class addr_msg_tinfo : public util::abstract_uniform_type_info<addressed_message ...@@ -479,10 +477,9 @@ class addr_msg_tinfo : public util::abstract_uniform_type_info<addressed_message
actor_ptr_name, actor_ptr_name,
group_ptr_name); group_ptr_name);
any_tuple_tinfo::s_deserialize(msg.content(), source, any_tuple_name); any_tuple_tinfo::s_deserialize(msg.content(), source, any_tuple_name);
auto msg_id = source->read_value(pt_uint64);
msg.id(message_id_t::from_integer_value(get<pt_uint64>(msg_id)));
source->end_object(); source->end_object();
//*reinterpret_cast<any_tuple*>(instance) = any_tuple(sender,
// receiver,
// content);
} }
addr_msg_tinfo() : any_tuple_name(to_uniform_name<any_tuple>()) addr_msg_tinfo() : any_tuple_name(to_uniform_name<any_tuple>())
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment