如何解决解析两个protobuf之一
我有一些C ++代码,有望收到两个protobuf之一。 (这是为了适应历史,而不是故意设计的。)
如果fcx.tcx.mk_fn_sig(...)
函数无法解析字符串(我想我还没有找到有关此文档的权威文档),则返回false,所以我尝试这样做:
ParseFromString
不幸的是,两种类型的protobuf通常都能够解析两种类型的protobuf的序列化字符串。换句话说,
const string epistula_stream; // Provided.
EpistulaOld e1;
Epistula e2;
if (e1.ParseFromString(epistula_stream)) {
// I've got an old-style Epistula,do something.
DoSomething(e1);
} else if (e2.ParseFromString(epistula_stream)) {
// I've got a new-style Epistula,do something.
DoSomething(e2);
} else {
LOG_ERROR << "That didn't work as expected.";
}
打印
LOG_INFO << "Old: " << e1.ParseFromString(epistula_stream);
LOG_INFO << "New: " << e2.ParseFromString(epistula_stream);
关于如何处理此问题的任何建议?
一种选择是,我在两个单独的端口上初始化两个单独的侦听器,因此客户端负责发送到正确的端口。但是,这并不理想,因为目标是给客户端代码一些时间来升级而不是强制执行。
更新1
最后,由于我可以对两个protobuf进行明显的反序列化,并且由于这是不打算在生产环境中运行超过几周的转换代码,因此我只对两者进行反序列化,然后做一些实际工作检查。例如,它们将时间戳存储在不同的位置,这些时间戳代表的是现在附近的时间或多或少吗?
计算出的成功概率很高,但是几乎没有铁皮的感觉。
更新2
protobuf的实际定义是:
Old: true
New: true
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。