By the way you may want to look at the section on "Union Types" in the
docs: http://code.google.com/apis/protocolbuffers/docs/techniques.html#union

On Jul 21, 9:51 am, jasonh <jas...@google.com> wrote:
> How about using extensions to solve this? You could define a generic
> message:
>
> message Packet {
>   extensions n to m;
>
> }
>
> // Payload messages
> message TestMessage {
>   extend Packet {
>     optional TestMessage test = 10;
>   }
>   required string msg = 2;
>
> }
>
> message TestMessage2 {
>   extend Packet {
>      optional TestMessage2 test2 = 11;
>   }
>   required int32 int = 2;
>
> }
>
> Then rather than transmitting bare TestMessage or TestMessage2's, you
> would transmit Packet messages, with only one of the extensions in the
> field. Something like: (assuming Java since you mentioned ByteBuffer)
>
> // Send a TestMessage
> TestMessage.Builder payload_builder = TestMessage.newBuilder();
> // Build payload.
> TestMessage payload = payload_builder.build();
> Packet packet = Packet.newBuilder().setExtension(TestMessage.test,
> payload);
> // Transmit packet
> packet.writeTo(...);
>
> This is effectively equivalent to your proposal - you would assign a
> unique id to each message type, and the proto library will take care
> of transmitting that id on the wire. You would just have to go through
> an extra accessor to get at the payload.
>
> On Jul 21, 6:12 am, Benedikt Hallinger
>
>
>
> <b.hallin...@skyforcesystems.de> wrote:
> > Just to be more precise: the overall goal is, that the messagetype
> > identification stuff should be managed entirely in the proto files. the
> > user should only be concerned to write his handlers and the network
> > protocol definitions.
>
> > -------- Original Message --------
> > Subject: Detecting message type prior parsing a ByteBuffer containing the
>
> > message
> > Date: Tue, 21 Jul 2009 15:01:38 +0200
> > From: Benedikt Hallinger <b...@php.net>
> > To: <protobuf@googlegroups.com>
>
> > Hello,
> > i currently try to build some small framework that eases the usage of
> > protocol buffer for a project of me.
>
> > The system allows for easier protocol handling and is composed of this:
> > - a PacketManager responsible for dispatching recieved messages
> > (bytebuffers) to PacketHandlers
> > - several PacketHandlers that are able to handle one specific message
> > described by a .proto file
>
> > The PacketHandlers know which message type of the available they can handle
> > and tell this information to the PacketManager when they are registered.
> > The overall logic already works, but the main problem is how to detect
> > which kind of message is recieved (and therefore which PacketHandler must
> > be called to handle the message). I tried to solve this by an header
> > message with an id-field with a default value, but this wont work because
> > the id field is not set and therefore cant be extracted from the
> > bytebuffer.
>
> > This problem however can be overcome when at message construction time the
> > type is explicitely set. But i wanted to implement a way the user need not
> > to deal with message ids but can concentrate on the payload data.
> > It would be cool if one can define "hardcoded" fields in the protocol
> > definition file so that those values are always sendet over the wire and
> > are (optionally) immutable.
>
> > ---File: net.proto---
>
> > message Header {
> > optional int32 type = 1;
> > }
> > message TestMessage {
> > optional int32 type = 1 [default=10];
>
> > required string msg = 2;
> > }
> > ---------------------
> > ^^ since TestMessage.type is not set in source code, it will not be sent
> > over the wire. I know that with "required" i could force the user to set
> > that field, but it would be good if he didnt need to deal with that:
>
> > ---File: net.proto.advanced---
>
> > message Header {
> > required int32 type = 1;
> > }
> > message TestMessage {
> > optional int32 type = 1 [static=10];
>
> > required string msg = 2;
> > }
> > ---------------------
>
> > Most probably im just missing something important as im new to this topic.
> > With best regards!
> > Beni
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to