2015-06-01 9 views
5

Próbuję wysyłać dane protobuf od strony cpp do strony java.Jak określić typ komunikatu w protobuf, aby móc używać tego type.parsefrom (byte [])

Mam kilka typów komunikatów zdefiniowanych w .proto

Na stronie CPP, mam teksty stałe dla każdego typu wiadomości i dodaję go do wyjścia buf następująco:

uint8_t* __temp = (uint8_t*)(buf); 
*__temp++ = (type) >> 8; 
*__temp = (type) & 0x00FF; 

Jak to zrobić dostać ten „typ”, który dodałem do buf, tak, że mogę osiągnąć coś podobnego

MessageType parseFrom(byte[] data); 

Odpowiedz

12

nie jest jasne, jaki jest dokładny wymóg. Zakładam jednak, że próbujesz wysyłać różne typy wiadomości, a odbiornik powinien móc przeanalizować poprawny obiekt z otrzymanych bajtów. Może to być wykonane, jak przedstawiono w przykładzie poniżej:

message Message1 { 
    required string a = 1; 
    required string b = 2; 
} 

message Message2 { 
    required int64 id = 1; 
    required string data = 2; 
} 




message WrapperMessage { 
    required int64 commonField = 1; 
    oneof msg { 
     Message1 m1 = 2; 
     Message2 m2 = 3; 
    } 
} 

zasadzie zawsze przedmiotem WrapperMessage jest przesyłana przez przewód, który otacza obiekt Message1 lub komunikat2. Następnie po stronie odbiorcy możemy najpierw przeanalizować obiekt WrapperMessage, a następnie użyć metody HasField, aby sprawdzić, czy w zapakowanym obiekcie znajdują się pola m1 lub m2, a następnie przeanalizować obiekt Message1 lub Message2.

Funkcja "oneof" może nie być dostępna dla starszej wersji kompilatora protobuf.

+0

Dzięki, to jest to, na co patrzę - wygląda na to, że mogę to zrobić w ten sposób - https://developers.google.com/protocol-buffers/docs/techniques#union –

+0

@ android.developer Ta dokumentacja jest nieaktualna; poprzedza wprowadzenie 'oneof'. Jeśli używasz protokołu protobuf 2.6 lub nowszego, zdecydowanie powinieneś używać 'oneof'. Złożyłem błąd dla osób protobuf, aby zaktualizować dokumenty. https://github.com/google/protobuf/issues/452 –

+0

Dzięki, użyjemy 'oneof', a następnie –

Powiązane problemy