如何检查是否可以将任何protobuf邮件解压缩为Javascript中的某些邮件类型?

时间:2018-12-28 06:41:54

标签: deserialization protocol-buffers protobufjs

考虑以下原型:

message Payload {
  google.protobuf.Any Object = 1;
}

message HelloMsg {
    string Name = 1;
}

message HiMsg {
    string Result = 1;
}

因此Object中的Payload字段可以具有任何有效的protobuf消息。

我的使用者使用Javacript编写。接收消息的方法知道它想要哪种protobuf消息。因此,当此处理程序方法接收到Payload时,我想知道是否可以将其解压缩到它期望的protobuf消息中。但是如何?

function myHandler(payload) {
    expectedPaylaodType = HelloMsg;
    // now how do I unpack, payload.getObject() to HelloMsg?

}

我尝试了以下操作,但失败了:

let anyObj = payload.getObject();
let targetObj = expectedPaylaodType();
let unpackedObj = anyObj.unpack(anyObj.deserializeBinary, targetObj.getTypeName());

这是因为targetObj.getTypeName未定义。

如果上述操作不可行,那么我可以检查typeURL字段吗?任何对象都有此信息。但是我不知道我可以检查targetObj的哪个字段。像这样:

if (anyObj.getTypeUrl() == targetObj.typeUrl) {
}

targetObj.typeUrl不存在,但是我不确定可以将其与哪个值进行比较。

0 个答案:

没有答案