google protobuf消息序列化后的数据是没有类型信息的。而一般网络应用要求序列化后发送到对端,还原出类型,反序列化,再派发给相应的消息处理函数。
以下代码简单实现了自动派发的机制。新增protobuf消息只要增加一行声明的代码和相应的处理函数就可以了。
http://eddyserver.googlecode.com/svn/trunk/common/tests/protoserver.cc
这段代码用了一些宏技巧,实现在proto.h声明新消息时自动生成相应的case分支。
proto_def.h也用了类似的技巧,来自动生成protobuf消息的类型标识和一些通过类型获取标识的模板。