У меня возникают трудности с определением правильного способа использования ускоренной сериализации/asio для отправки объектов по сети. Класс message
максимально прост. Это не подходит для С++ и не подходит для моих нужд, я просто временно упрощаю тестирование asio/ser:
class message {
friend class boost::serialization::access;
public:
message(){}
int type;
int sender;
int assignment;
int nogood;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & type;
ar & sender;
ar & assignment;
ar & nogood;
}
};
На стороне клиента, когда агент решает отправить сообщение, отправляет его на сервер через TCP-соединение:
message m;
// do something to generate message
boost::asio::streambuf bufx;
std::ostream os( &bufx );
boost::archive::binary_oarchive ar( os );
ar & m;
boost::asio::write( socket, bufx);
Код на стороне сервера:
boost::asio::streambuf bufx;
std::istream is(&bufx);
boost::archive::binary_iarchive ia(is); // <--- Exception: invalid signature
size_t rcx = asio::read(socket,bufx);
message m;
ia >> m;