Hi!
I'm working with message_queue and want to send a structure to receiver-app. How to serialize i correctly and how to receive it?
Here's some sending code:
Data data;
data.counter = 9;
data.money = 5.4;
//data.name = "Guten Tag";
std::stringstream os; // = new std::stringstream;
boost::archive::text_oarchive oa(os);
oa << data;
ipc::message_queue::remove("mq_main");
ipc::message_queue mq(ipc::create_only, "mq_main", 1, sizeof(std::stringstream));
mq.send(&os, sizeof(os), 0);
Data data;
std::stringstream is; // = new std::stringstream;
try
{
unsigned int priority; ///< The priority
ipc::message_queue::size_type recvd_size;
ipc::message_queue mq(ipc::open_only, "mq_main");
if(mq.try_receive(&is, sizeof(std::stringstream), recvd_size, priority))
{
boost::archive::text_iarchive ai(is); // CRASH
ai >> data;
}
//mq.receive(&is, sizeof(is), recvd_size, priority);
//mq.do_receive(ipc::message_queue_t::non_blocking, &is, sizeof(is), recvd_size, priority);
//boost::archive::text_iarchive * ai = new boost::archive::text_iarchive(is);
//*ai >> data;
//data << ai;
//mq_recv->receive(&data, sizeof(data), recvd_size, priority);
ipc::message_queue::remove("mq_main");
//is.~basic_stringstream();
}
catch(ipc::interprocess_exception &ex)
{
ipc::message_queue::remove("mq_main");
std::cout << ex.what() << std::endl;
return;
}