#include #include#include
#include
#include
"person.pb.h
"using
namespace
std;
string
package;
typedef
void (*callbackfunc)(const
string &type_name, google::protobuf::message *message);
//descriptor -> callback
mapwrite_callbacks;
mapread_callbacks;
google::protobuf::message *createmessage(const std::string &type_name)
}return
message;
}void writehead(const
string &type_name)
void writepayload(const
string &data)
//業務邏輯,負責構造pb並序列化
void onstudentwrite(const
string &type_name, google::protobuf::message *arg)
//業務邏輯,負責構造pb並序列化
void onteacherwrite(const
string &type_name, google::protobuf::message *arg)
//業務邏輯,負責反序列化解出pb
void onstudentread(const
string &data, google::protobuf::message *arg)
//業務邏輯,負責反序列化解出pb
void onteacherread(const
string &data, google::protobuf::message *arg)
void writedispatcher(const
string &type_name) }//
解包,根據pb型別呼叫對應的業務處理函式
void
readdispatcher()
uint16_t data_len = atoi(package.substr(pos, 2
).c_str());
pos += 2
;
string data =package.substr(pos, data_len);
google::protobuf::message *message =createmessage(type_name);
pos +=data_len;
read_callbacks[descriptor](data, message);
//down casting
delete
message;
}}void
registecallback()
intmain()
參考
protobuf反射機制
參考 google protocol buffers protobuf 是一款非常優秀的庫,它定義了一種緊湊的可擴充套件二進位制訊息格式,特別適合網路資料傳輸。它為多種語言提供 binding,大大方便了分布式程式的開發,讓系統不再侷限於用某一種語言來編寫。在網路程式設計中使用 protobuf 需...
ProtoBuf 反射詳解
protocol buffer 簡稱 protobuf,是用於結構化資料序列化的靈活 高效 自動的方法,又如 xml,不過它更小 更快 也更簡單。你可以定義自己的資料結構,然後使用 生成器生成的 來讀寫這個資料結構。你甚至可以在無需重新部署程式的情況下更新資料結構。本文主要介紹 protobuf 裡...
C 反射功能
c 中的反射使用主要集中在system.reflection命名空間中,通過獲取物件的屬性和方法並建立物件來呼叫對應的函式等功能,方法主要集中在如下類 methodinfo 獲取類的方法 type 獲取類的型別 constructinfo 獲取該類的構造方法用於建立物件。完整的示例如下 class ...