That's working, thanks!

On Oct 13, 8:39 pm, Christopher Head <hea...@gmail.com> wrote:
> What about creating a CodedOutputStream over a StringOutputStream then,
> and writing your messages to that?
>
> Chris
>
> On Thu, 13 Oct 2011 01:45:23 -0700 (PDT)
>
>
>
>
>
>
>
> Vlunk <laurent...@gmail.com> wrote:
> > That's what i was using before having to send several messages at
> > once.
>
> > MessageLite::SerializeToString() expects a string as argument, what
> > can i give him since i'm actually building the message from a stream.
> > I'm using WriteLittleEndian32 & WriteVarint32 to build the message,
> > how would i do working with strings ?
>
> > On Oct 13, 8:10 am, Christopher Head <hea...@gmail.com> wrote:
> > > -----BEGIN PGP SIGNED MESSAGE-----
> > > Hash: RIPEMD160
>
> > > Why not just use the "MessageLite::SerializeToString()" function?
>
> > > Chris
>
> > > On Wed, 12 Oct 2011 04:18:02 -0700 (PDT)
>
> > > Vlunk <laurent...@gmail.com> wrote:
> > > > Hello,
>
> > > > I'm trying to send a string representation of several different
> > > > protobuf objects
>
> > > > Here are two objects:
>
> > > > test::Arrow arrow;
> > > > arrow.set_id(5);
> > > > arrow.set_x(256.00321);
> > > > arrow.set_y(128.21689);
>
> > > > test::Char char;
> > > > char.set_id(5);
> > > > char.set_x(25.21356);
> > > > char.set_y(501.21359);
>
> > > > I know the doc is showing this :
> > > > int fd = open("myfile", O_WRONLY);
> > > > ZeroCopyOutputStream* raw_output = new FileOutputStream(fd);
> > > > CodedOutputStream* coded_output = new
> > > > CodedOutputStream(raw_output);
>
> > > > But I have no idea how to apply that in my case, since i'm not
> > > > using a file. I think my problem is that i'm a bit in the blur
> > > > with the *stream* concept.
>
> > > > int id = 1;
> > > > coded_output ->WriteLittleEndian32(id);
> > > > coded_output ->WriteVarint32(arrow.ByteSize());
> > > > arrow.SerializeToCodedStream(coded_output);
>
> > > > int id = 2;
> > > > coded_output ->WriteLittleEndian32(id);
> > > > coded_output ->WriteVarint32(char.ByteSize());
> > > > char.SerializeToCodedStream(coded_output);
>
> > > > coded_output is a stream but i need a string how do serialize it
> > > > that way now !? (server is python)
> > > > * Sending as string*
>
> > > > delete coded_output;
> > > > delete raw_output;
> > > > close(fd);
>
> > > > Then the reading part :
>
> > > > *"Converting" a string to a stream*
> > > > *Stream initialization*
> > > > int32 type;
> > > > int32 size;
> > > > coded_input_stream.ReadLittleEndian32(&type);
> > > > coded_input_stream.ReadVarint32(&size);
> > > > CodedInputStream::Limit old_limit =
> > > > coded_input_stream.PushLimit(size);
> > > > if type==1 (pseudocode)
> > > >     arrow.ParseFromCodedStream(&coded_input_stream);
> > > >     coded_input_stream.PopLimit(old_limit);
>
> > > > coded_input_stream.ReadLittleEndian32(&type);
> > > > coded_input_stream.ReadVarint32(&size);
> > > > CodedInputStream::Limit old_limit =
> > > > coded_input_stream.PushLimit(size);
> > > > if type==2 (pseudocode)
> > > >     char.ParseFromCodedStream(&coded_input_stream);
> > > >     coded_input_stream.PopLimit(old_limit);
>
> > > > Does reading the stream actually *eat* it or i need to play a bit
> > > > more on the limits ?
>
> > > > I'm aware that those question are actually more related to c++
> > > > than protobuf, I don't expect you to answer them but I would like
> > > > at least to know if i'm on the right track.
>
> > > > Thanks.
>
> > > -----BEGIN PGP SIGNATURE-----
> > > Version: GnuPG v2.0.17 (GNU/Linux)
>
> > > iEYEAREDAAYFAk6WgMgACgkQXUF6hOTGP7e8bACgnEWiDIJcWX2FjEGRBoYya+TA
> > > ZZMAmgJD50SOsck95wX54fXqUDlF8Eji
> > > =8/HS
> > > -----END PGP SIGNATURE-----

-- 
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