考虑以下原型:
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
不存在,但是我不确定可以将其与哪个值进行比较。