#include "examples/protobuf/codec/dispatcher_lite.h" #include "examples/protobuf/codec/query.pb.h" #include using std::cout; using std::endl; void onUnknownMessageType(const muduo::net::TcpConnectionPtr&, const MessagePtr& message, muduo::Timestamp) { cout << "onUnknownMessageType: " << message->GetTypeName() << endl; } void onQuery(const muduo::net::TcpConnectionPtr&, const MessagePtr& message, muduo::Timestamp) { cout << "onQuery: " << message->GetTypeName() << endl; std::shared_ptr query = muduo::down_pointer_cast(message); assert(query != NULL); } void onAnswer(const muduo::net::TcpConnectionPtr&, const MessagePtr& message, muduo::Timestamp) { cout << "onAnswer: " << message->GetTypeName() << endl; std::shared_ptr answer = muduo::down_pointer_cast(message); assert(answer != NULL); } int main() { GOOGLE_PROTOBUF_VERIFY_VERSION; ProtobufDispatcherLite dispatcher(onUnknownMessageType); dispatcher.registerMessageCallback(muduo::Query::descriptor(), onQuery); dispatcher.registerMessageCallback(muduo::Answer::descriptor(), onAnswer); muduo::net::TcpConnectionPtr conn; muduo::Timestamp t; std::shared_ptr query(new muduo::Query); std::shared_ptr answer(new muduo::Answer); std::shared_ptr empty(new muduo::Empty); dispatcher.onProtobufMessage(conn, query, t); dispatcher.onProtobufMessage(conn, answer, t); dispatcher.onProtobufMessage(conn, empty, t); google::protobuf::ShutdownProtobufLibrary(); }