Отправка вектора через zeromq с помощью msgpack

Я не могу отправить vector из struct что я сериализовал с msgpack через ZeroMQ.

Это вектор этой структуры:

struct MyData
{
MyData() : id(0), x(0), y(0), a(0) {}
MyData(const Obj &r) : id(0), x(r.pose[0]), y(r.pose[1]), a(r.pose[2]) {}
MyData(const Obj *r) : id(0), x(r->pose[0]), y(r->pose[1]), a(r->pose[2]) {}
double id;
double x;
double y;
double a;
MSGPACK_DEFINE(id, x, y, a);
};

На отправляющей стороне:

data это std::vector<MyData>

msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.data(), sizeof(char *) * sbuf.size(), NULL, NULL);
local_socket->send(msg); // this is just zeromq's send function

Я построил свой sbuffer или же message_t неправильно?

На принимающей стороне:

Я не уверен, что должен был разыграть msg.data() или нет, но я не могу найти хорошую документацию о том, как работать с ZeroMQ и пакетом сообщений.

message_t msg;
server_socket->recv(&msg);

msgpack::unpacked unpacked;
msgpack::unpack(&unpacked, reinterpret_cast<char*>(msg.data()), msg.size());
msgpack::object obj = unpacked.get();

std::vector<MyData> data;
obj.convert(&data);
printf("size %d\n", data.size());

Я получаю следующую ошибку:

прекращение вызова после создания экземпляра msgpack :: type_error
что (): std :: bad_cast прервано

Буду признателен за любую помощь.

2

Решение

Кажется, это помогло мне:

msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.size());
memcpy(msg.data(), sbuf.data(), sbuf.size());
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]