Sto provando a hackerare un client insieme in C++ usando Google Protocol Buffers e boost :: asio.Invio di messaggi Protobuf con boost :: asio
Il mio problema è che non so come posso inviare il messaggio protobuf ad asio. Quello che ho è questa:
// set up *sock - works
PlayerInfo info;
info.set_name(name);
// other stuff
Ora so che la segue è sbagliato, ma vi posterò in ogni modo:
size_t request_length = info.ByteSize();
boost::asio::write(*sock, boost::asio::buffer(info, request_length));
ho ottenuto quanto che io so che devo comprimere il mio messaggio in modo diverso nel buffer, ma come?
In generale, sto attraversando un periodo difficile per capire come potenziare: asio funziona. Ci sono alcuni tutorial, ma di solito coprono solo l'invio di formati di dati standard come ints, che funziona immediatamente. Ho pensato che il mio problema è serializzazione, ma d'altra parte ho imparato che protobuf dovrebbe fare questo per me ... e ora sono confuso;)
Grazie per il vostro aiuto!
-> Daniel Gehriger ha fornito la soluzione, grazie mille!
Sarà necessario aggiungere ulteriori informazioni allo stream in modo da poter leggere correttamente l'oggetto PlayerInfo dall'altra parte. Protobuf non incorpora direttamente il tipo di oggetto nello stream. Non penso che contenga la lunghezza, ma dovrei controllare la documentazione. A proposito, ASIO non sa nulla sugli oggetti; si occupa solo di byte. Tienilo a mente quando leggi gli esempi e la documentazione. – Dan
Daniel Gehriger: Grazie mille! Ha funzionato! – adi64
Dan: Sì, ho pensato di dover aggiungere la dimensione in anticipo in modo che il server sia in grado di leggerlo ... Grazie! – adi64