protobuf extend使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_30071459/article/details/82113634

首先,message定义如下:

package TEST;

message BaseMsg
{
    required uint32 seq = 1;
    required Msg msg= 2;
}

message Msg
{
    enum Type
    {
        Read= 10;
        Write= 11;
    }
    required Type type = 1;

    extensions 100 to 10000
}

BaseMsg中嵌套了另一个message:Msg,Msg中最后一行extensions 100 to 10000,预留了100-10000的序号extend。

在另一个proto文件中:

extend Msg
{
    optional uint32 num = 100;
    optional ReqMsg ReqMsg_body = 101;
    optional RspMsg RspMsg_body = 102;
}


message ReqMsg
{
   ...
}

message RspMsg
{
   ...
}

使用:

BaseMsg bmsg;
bmsg.set_seq(1);
Msg *msg = bmsg.mutable_msg();//嵌套另一个message,使用mutable_***得到指向该message的指针
msg->set_type(Msg::Read);
ReqMsg *reqmsg = msg->MutableExtension(TEST::ReqMsg_body);//message的extend也是一个message,使用
//MutableExtension读取,通过reqmsg可以设置ReqMsg的值

msg->SetExtension(TEST::num,2);//entend不是message,直接设置
...

ReqMsg reqmsg2 = msg->GetExtension(TEST::ReqMsg_body);//通过GetExtension读取entend

如果message中有另一个message,那么嵌套的message没有set方法,需要用mutable获取指针然后操作赋值。

读取时,不管是不是message类型,都可以通过括号读取。

猜你喜欢

转载自blog.csdn.net/sinat_30071459/article/details/82113634