#include "examples/protobuf/codec/dispatcher.h" #include "examples/protobuf/codec/query.pb.h" #include using std::cout; using std::endl; typedef std::shared_ptr QueryPtr; typedef std::shared_ptr AnswerPtr; void test_down_pointer_cast() { ::std::shared_ptr msg(new muduo::Query); ::std::shared_ptr query(muduo::down_pointer_cast(msg)); assert(msg && query); if (!query) { abort(); } } void onQuery(const muduo::net::TcpConnectionPtr&, const QueryPtr& message, muduo::Timestamp) { cout << "onQuery: " << message->GetTypeName() << endl; } void onAnswer(const muduo::net::TcpConnectionPtr&, const AnswerPtr& message, muduo::Timestamp) { cout << "onAnswer: " << message->GetTypeName() << endl; } void onUnknownMessageType(const muduo::net::TcpConnectionPtr&, const MessagePtr& message, muduo::Timestamp) { cout << "onUnknownMessageType: " << message->GetTypeName() << endl; } int main() { GOOGLE_PROTOBUF_VERIFY_VERSION; test_down_pointer_cast(); ProtobufDispatcher dispatcher(onUnknownMessageType); dispatcher.registerMessageCallback(onQuery); dispatcher.registerMessageCallback(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(); }