I'm continuing to fiddle with this problem. For some reason it seems that 
I'm missing a byte count when sending from my client.

m_client.GetServerConnection.GetClient().Send(m_packet, 
message.CalculateSize() + 1) // I needed to add + 1

I thought it was strange that my message was only being received as: 
#\u0012!\n\u001Ftype.googleapis.com/server.Pin

I'm not sure why I have to add + 1 tho and CalculateSize isn't giving the 
correct size naturally.

On Saturday, July 23, 2016 at 2:56:08 PM UTC-7, Chazix wrote:
>
> I'm utilizing Protobuf3 with c# for my client & c++ for my server, where 
> the .proto's are generated from the corresponding protoc3 compiler. I'm new 
> to utilizing Google Protocol Buffers, where I'm currently trying to figure 
> out how to re-parse the received bytes on my server that were sent from my 
> client to turn it back into it's originating google::protobuf::Message 
> object on my c++ server.
>
> My client is sending a CodedOutputStream in c# :
>
>     public PacketHandler()
>>     {
>>       m_client  = GetComponent<ClientObject>();
>>       m_packet  = new 
>> byte[m_client.GetServerConnection().GetMaxPacketSize()];
>>       m_ostream = new BinaryWriter(new MemoryStream(m_packet));
>>     }
>>
>>     public void DataToSend(IMessage message)
>>     {
>>       // message looks like :
>>       // Base.BaseMessage msg = new Base.BaseMessage();
>>       // msg.Msg = Google.Protobuf.WellKnownTypes.Any.Pack(new 
>> Server.Ping());
>>       CodedOutputStream output = new 
>> CodedOutputStream(m_ostream.BaseStream, true);
>>       output.WriteMessage(message);
>>       output.Flush();
>>       m_client.GetServerConnection().GetClient().Send(m_packet, 
>> message.CalculateSize());
>>     }
>>
>
> This seems to be working, the message that is sent right now is a simple 
> Ping message that looks like this:
>
>     // Ping.proto
>>     syntax = "proto3";
>>     package server;
>>
>>     import "BaseMessage.proto";
>>     
>>     message Ping {
>>       
>>     }
>>     
>>     message Pong {
>>       
>>     }
>>
>
> My BaseMessage looks like this :
>
>     // BaseMessage.proto
>>     syntax = "proto3";
>>     
>>     package base;
>>     
>>     message BaseMessage {
>>       uint32 size = 1;
>>       google.protobuf.Any msg = 2;
>>     }
>>
>
> The received message that I am getting on my c++ server side looks like 
> this : #\u0012!\n\u001Ftype.googleapis.com/server.Pin
>
> When receiving the message I am attempting to re-parse using the 
> CodedInputStream object by attempting to parse the received bytes.
>
>     PacketHandler::PacketHandler(QByteArray& packet, const 
>> Manager::ClientPtr client) :
>>         m_packet(packet),
>>         m_client(client)
>>     {
>>       unsigned char buffer[512] = { 0 };
>>       unsigned char data[packet.size()] = { 0 };
>>       memcpy(data, packet.data(), packet.size());
>>     
>>       google::protobuf::uint32 msgSize;
>>       google::protobuf::io::CodedInputStream inputStream(data, 
>> packet.size());
>>       inputStream.ReadVarint32(&msgSize); // read the prefixed message 
>> length
>>
>>       base::BaseMessage msg;
>>       msg.ParseFromCodedStream(&inputStream);
>>
>>       if (msg.msg().Is<server::Ping>())
>>       {
>>         // This never occurs
>>         server::Ping pingMsg;
>>         msg.msg().UnpackTo(&pingMsg);
>>         qDebug() << "Is a Ping";
>>       }
>>       qDebug() << msg.size(); // this isn't the correct value either
>>     }
>>
>
> This is where I am a bit unsure of the process that is needing to be done 
> to re-parse the message into the particular message. I'm reading the 
> initial prefixed length of message to remove that from the parse, where the 
> inputStream has the remaining bytes for the message identification.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to