I answered this at stackoverflow (http://stackoverflow.com/a/11083229/23354)
The main problem was the data-types in V3DDelta not matching the contract
(note: there are tools for generating classes from a .proto definition).
The particular code for reading the data stored via "writeDelimitedTo"
needed a particular call:
int len = ProtoReader.DirectReadVarintInt32(source);
var resp = (Response)model.Deserialize(source , null, typeof(Response),
len);
Marc
(protobuf-net)
On 18 June 2012 10:07, 13Homer <[email protected]> wrote:
> proto file:
> package nemesis;
>
> option java_package = "IQFeedServer.protobuf";
> option java_outer_classname = "Protos";
>
> option optimize_for = SPEED;
>
> message V3DDelta {
> optional int32 bid = 1;
> optional int32 bidSize = 2;
> optional int32 ask = 3;
> optional int32 askSize = 4;
> }
>
> message Request {
> optional int32 type = 1;
> optional string request = 2;
> }
>
> message Response {
> optional int32 type = 1;
> optional string response = 2;
> repeated V3DDelta v3dDelta = 3;
> }
>
>
> protobuf-net classes:
> [ProtoContract]
> public class V3DDelta {
> [ProtoMember(1)]
> public double bid { get; set; }
> [ProtoMember(2)]
> public int bidSize { get; set; }
> [ProtoMember(3)]
> public double ask { get; set; }
> [ProtoMember(4)]
> public int askSize { get; set; }
> }
>
> [ProtoContract]
> public class Request {
> [ProtoMember(1)]
> public int Type { get; set; }
> [ProtoMember(2)]
> public string Rq { get; set; }
> }
>
> [ProtoContract]
> public class Response {
> [ProtoMember(1)]
> public int Type { get; set; }
> [ProtoMember(2)]
> public string Rsp { get; set; }
> [ProtoMember(3)]
> public List<V3DDelta> v3dDelta { get; set; }
> public Response() {
> v3dDelta = new List<V3DDelta>();
> }
> }
>
> When i'm sending message with v3dDeltas (doesn't matter 1 or more) i've
> got this:
> Invalid wire-type; this usually means you have over-written a file
> without truncating or setting the length; see
> http://stackoverflow.com/q/2152978/23354
>
> The message is:
> 9 8 5 26 5 8 233 98 16 1
> and is exactly the same on the other side (there's no other bytes in
> buffer). I'm reading it that way:
> Response rsp = Serializer.DeserializeWithLengthPrefix<Response>(rcvstream,
> PrefixStyle.Base128);
> (it is encoded using writeDelimitedTo on the java side).
>
> It is right to use List for repeated fields? I tried use array
> (V3DDelta[]) but exception is the same. When there was no v3dDelta field
> everything works great. I'm missing something?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/protobuf/-/jfYetWUvXiAJ.
> To post to this group, send email to [email protected].
> 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.
>
--
Regards,
Marc
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To post to this group, send email to [email protected].
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.