2016-11-15 5 views
1

Ich bin neu in der Verwendung von Protobuf. Ich habe eine Server-Client-Kommunikation (UDP) in C++. Jetzt benutze ich Protobuf, um eine Nachricht zu senden, die einige Informationen zum Server enthält.Verwendung von Union-Typen Protobuf C++

package Test; 
message vName{ 
required int32 name = 1; 
} 

message vNat{ 
required int32 nat = 1; 
} 

message vTan{ 
required int32 tan = 1; 
} 
message Test{ 
enum Type { vName = 1; vNAT = 2; vTAN = 3;} 

required Type type = 1; 

optional vName name = 2; 
optional vNat nat = 2; 
optional vTan tan = 2; 
} 

Jetzt möchte ich nur die Informationen senden, die festgelegt ist. Zum Beispiel ist Typ 1. Wie kann ich dann auf den Namen zugreifen oder ihn festlegen?

Kann jemand ein kleines Schnipsel machen, das ich verstehen kann, wie man es benutzt?

Ich entschuldige mich für meine Englisch-Kenntnisse: D

Protobuf Version: 2.5.0

OS: Windows Enviroment: Visual Studio

Sprache: C++

Von https://developers.google.com/protocol-buffers/docs/techniques#union Sie können auch eine ENUM-Feld haben wollen, dass die Nachricht identifiziert in gefüllt ist, so dass Sie auf sie wechseln:

message OneMessage { 
enum Type { FOO = 1; BAR = 2; BAZ = 3; } 

// Identifies which field is filled in. 
required Type type = 1; 

// One of the following will be filled in. 
optional Foo foo = 2; 
optional Bar bar = 3; 
optional Baz baz = 4; 
} 

Wie kann ich das im Kodex verwenden? Ich denke, das ist was ich will. Hat jemand eine Idee, wo ich ein Beispiel finden kann?

+0

* "Kann jemand ein kleines Schnipsel machen, das ich verstehen kann, wie man es benutzt?" * Unwahrscheinlich, dass dies geschieht: SO ist nicht Code-Schreiben-Service. Ich schlage vor, dass Sie zuerst versuchen, dies selbst zu tun, und dann fragen, ob Sie ein bestimmtes Problem ansprechen. – user694733

+0

@George dein Recht. Es war meine Schuld – SDE

+0

Zuerst allen danken, die sich die Zeit nehmen, mir zu helfen. @ user694733: Das Problem ist, dass ich nicht verstanden habe, wie man so etwas benutzt. Ich habe viele Nachrichten und möchte nicht immer die Nachricht senden, die auf der Client-Seite festgelegt ist. In der Proto-Datei habe ich eine Nachricht, die vname, vnat, ... als optional enthält. Aber mein Ziel, die Nachricht nicht nur die Nachricht zu senden, die auf der Client-Seite festgelegt wird. Ich hoffe, ich könnte mein Problem erklären: D. – SDE

Antwort

0

Es klingt nach dem, was Sie suchen, ist this, anstatt optionale Felder und eine Problemumgehung zu verwenden.

Verwandte Themen