Re: repeated fields

2008-09-28 Thread Kenton Varda
You need to write a length before writing each message, so that when you
read them on the receiving end you can separate the messages before parsing
them.

On Sat, Sep 27, 2008 at 10:17 AM, <[EMAIL PROTECTED]> wrote:

>
> Hello again,
>
> I have another problem concerning repeated fields:
>
> The same example as above, every client sends continuously a Player
> message to the server.
> The server continuously generates a Playerlist message taking the
> newest Player's and sends one to every client.
>
> The problem is, when I parse a Playerlist on the client side, and
> there are more than one Playerlists in the buffer (probably all from
> the same player) I get one Playerlist with multiple players in it.
> I now realized that ParseFrom does actually merge messages and
> repeated fields are appended. This is not desired in my case, I just
> need the last one.
> Is there a way to disable the appending of repeated fields when
> parsing a buffer or is my idea for distributing the players anyway a
> bad solution ?
>
> Regards,
> Rico
>
> On Sep 24, 7:04 pm, [EMAIL PROTECTED] wrote:
> > Hello Kenton,
> >
> > Thanks a lot! That is exactly what I was looking for!
> >
> > Regards,
> > Rico
> >
> > On 24 Sep., 18:56, "Kenton Varda" <[EMAIL PROTECTED]> wrote:
> >
> > > Playerlist also has methods:
> > > const RepeatedPtrField& player() const;
> > > RepeatedPtrField* mutable_player();
> >
> > > RepeatedPtrField is documented here:
> >
> > >http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.
> ..
> >
> > > It has methods which allow you to add an existing object without
> copying
> > > (look under "Advanced memory management).  Of course, if you use these,
> then
> > > the Player objects will become property of the Playerlist.  You will
> have to
> > > be careful to take ownership back from the list later by repeatedly
> calling
> > > ReleaseLast().
> >
> > > Also note that every protocol message has a CopyFrom() method which can
> be
> > > used to copy an entire message object, so you would not have to call
> > > set_id(), set_x(), etc. manually.
> >
> > > On Wed, Sep 24, 2008 at 8:01 AM, <[EMAIL PROTECTED]> wrote:
> >
> > > > Hello,
> >
> > > > I have a question concerning the repeated fields. I'll start with an
> > > > example:
> >
> > > > message Player {
> > > >  required int32 id = 1;
> > > >  required int32 x =2;
> > > >  required int32 y=3;
> > > > }
> >
> > > > message Playerlist{
> > > >  repeated Player player= 1;
> > > > }
> >
> > > > I have a server and get Player's from different clients and hold them
> > > > in a map (this map is updated all the time). After a certain time I
> > > > want to get all Players, create a Playerlist and send it to all
> > > > clients. The Playerlist however has just a method
> >
> > > > Player* add_player();
> >
> > > > I will have to copy all the Player's I've already created :
> >
> > > > Player* newP = playerlist.add_player();
> > > > newP->set_id( playerFromMap->id() );
> >
> > > > Isn't there a better way to do this?
> >
> > > > Regards
> >
>

--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~--~~~~--~~--~--~---



Re: repeated fields

2008-09-27 Thread rico . cadetg

Hello again,

I have another problem concerning repeated fields:

The same example as above, every client sends continuously a Player
message to the server.
The server continuously generates a Playerlist message taking the
newest Player's and sends one to every client.

The problem is, when I parse a Playerlist on the client side, and
there are more than one Playerlists in the buffer (probably all from
the same player) I get one Playerlist with multiple players in it.
I now realized that ParseFrom does actually merge messages and
repeated fields are appended. This is not desired in my case, I just
need the last one.
Is there a way to disable the appending of repeated fields when
parsing a buffer or is my idea for distributing the players anyway a
bad solution ?

Regards,
Rico

On Sep 24, 7:04 pm, [EMAIL PROTECTED] wrote:
> Hello Kenton,
>
> Thanks a lot! That is exactly what I was looking for!
>
> Regards,
> Rico
>
> On 24 Sep., 18:56, "Kenton Varda" <[EMAIL PROTECTED]> wrote:
>
> > Playerlist also has methods:
> > const RepeatedPtrField& player() const;
> > RepeatedPtrField* mutable_player();
>
> > RepeatedPtrField is documented here:
>
> >http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google...
>
> > It has methods which allow you to add an existing object without copying
> > (look under "Advanced memory management).  Of course, if you use these, then
> > the Player objects will become property of the Playerlist.  You will have to
> > be careful to take ownership back from the list later by repeatedly calling
> > ReleaseLast().
>
> > Also note that every protocol message has a CopyFrom() method which can be
> > used to copy an entire message object, so you would not have to call
> > set_id(), set_x(), etc. manually.
>
> > On Wed, Sep 24, 2008 at 8:01 AM, <[EMAIL PROTECTED]> wrote:
>
> > > Hello,
>
> > > I have a question concerning the repeated fields. I'll start with an
> > > example:
>
> > > message Player {
> > >  required int32 id = 1;
> > >  required int32 x =2;
> > >  required int32 y=3;
> > > }
>
> > > message Playerlist{
> > >  repeated Player player= 1;
> > > }
>
> > > I have a server and get Player's from different clients and hold them
> > > in a map (this map is updated all the time). After a certain time I
> > > want to get all Players, create a Playerlist and send it to all
> > > clients. The Playerlist however has just a method
>
> > > Player* add_player();
>
> > > I will have to copy all the Player's I've already created :
>
> > > Player* newP = playerlist.add_player();
> > > newP->set_id( playerFromMap->id() );
>
> > > Isn't there a better way to do this?
>
> > > Regards
--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~--~~~~--~~--~--~---



Re: repeated fields

2008-09-24 Thread rico . cadetg

Hello Kenton,

Thanks a lot! That is exactly what I was looking for!

Regards,
Rico

On 24 Sep., 18:56, "Kenton Varda" <[EMAIL PROTECTED]> wrote:
> Playerlist also has methods:
> const RepeatedPtrField& player() const;
> RepeatedPtrField* mutable_player();
>
> RepeatedPtrField is documented here:
>
> http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google...
>
> It has methods which allow you to add an existing object without copying
> (look under "Advanced memory management).  Of course, if you use these, then
> the Player objects will become property of the Playerlist.  You will have to
> be careful to take ownership back from the list later by repeatedly calling
> ReleaseLast().
>
> Also note that every protocol message has a CopyFrom() method which can be
> used to copy an entire message object, so you would not have to call
> set_id(), set_x(), etc. manually.
>
> On Wed, Sep 24, 2008 at 8:01 AM, <[EMAIL PROTECTED]> wrote:
>
> > Hello,
>
> > I have a question concerning the repeated fields. I'll start with an
> > example:
>
> > message Player {
> >  required int32 id = 1;
> >  required int32 x =2;
> >  required int32 y=3;
> > }
>
> > message Playerlist{
> >  repeated Player player= 1;
> > }
>
> > I have a server and get Player's from different clients and hold them
> > in a map (this map is updated all the time). After a certain time I
> > want to get all Players, create a Playerlist and send it to all
> > clients. The Playerlist however has just a method
>
> > Player* add_player();
>
> > I will have to copy all the Player's I've already created :
>
> > Player* newP = playerlist.add_player();
> > newP->set_id( playerFromMap->id() );
>
> > Isn't there a better way to do this?
>
> > Regards
--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~--~~~~--~~--~--~---



Re: repeated fields

2008-09-24 Thread Kenton Varda
Playerlist also has methods:
const RepeatedPtrField& player() const;
RepeatedPtrField* mutable_player();

RepeatedPtrField is documented here:

http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.repeated_field.html

It has methods which allow you to add an existing object without copying
(look under "Advanced memory management).  Of course, if you use these, then
the Player objects will become property of the Playerlist.  You will have to
be careful to take ownership back from the list later by repeatedly calling
ReleaseLast().

Also note that every protocol message has a CopyFrom() method which can be
used to copy an entire message object, so you would not have to call
set_id(), set_x(), etc. manually.

On Wed, Sep 24, 2008 at 8:01 AM, <[EMAIL PROTECTED]> wrote:

>
> Hello,
>
> I have a question concerning the repeated fields. I'll start with an
> example:
>
> message Player {
>  required int32 id = 1;
>  required int32 x =2;
>  required int32 y=3;
> }
>
> message Playerlist{
>  repeated Player player= 1;
> }
>
> I have a server and get Player's from different clients and hold them
> in a map (this map is updated all the time). After a certain time I
> want to get all Players, create a Playerlist and send it to all
> clients. The Playerlist however has just a method
>
> Player* add_player();
>
> I will have to copy all the Player's I've already created :
>
> Player* newP = playerlist.add_player();
> newP->set_id( playerFromMap->id() );
>
> Isn't there a better way to do this?
>
> Regards
> >
>

--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~--~~~~--~~--~--~---