Estoy tratando de hackear un cliente en C++ usando los Buffers de Protocolo de Google y boost :: asio.Enviando mensajes de Protobuf con boost :: asio
Mi problema es que no sé cómo puedo enviar el mensaje de protobuf a asio. Lo que tengo es la siguiente:
// set up *sock - works
PlayerInfo info;
info.set_name(name);
// other stuff
Ahora sé que lo siguiente es incorrecto, pero lo voy a publicar de todos modos:
size_t request_length = info.ByteSize();
boost::asio::write(*sock, boost::asio::buffer(info, request_length));
que tiene la medida de lo que sé que tengo que empacar mi mensaje de manera diferente en el búfer, pero ¿cómo?
En general, me está resultando difícil descifrar cómo funciona boost :: asio. Hay algunos tutoriales, pero normalmente solo cubren el envío de formatos de datos estándar, como ints, que funciona de fábrica. Pensé que mi problema es serialización, pero por otro lado aprendí que protobuf debería hacer esto por mí ... y ahora estoy confundido;)
¡Gracias por su ayuda!
-> Daniel Gehriger brindó la solución, ¡muchas gracias!
Necesitará agregar algo más de información a la transmisión para que pueda leer de manera confiable el objeto PlayerInfo en el otro extremo. Protobuf no incrusta directamente el tipo de objeto en la secuencia. No creo que contenga la longitud tampoco, pero tendría que verificar la documentación. Por cierto, ASIO no sabe acerca de los objetos; solo trata con bytes. Tenga esto en cuenta cuando lea los ejemplos y la documentación. – Dan
Daniel Gehriger: ¡Muchas gracias! ¡Eso funciono! – adi64
Dan: Sí, pensé que tenía que agregar el tamaño de antemano para que el servidor pueda leerlo ... ¡Gracias! – adi64