RpcChannel.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifndef RPC_RPCCHANNEL_H
  2. #define RPC_RPCCHANNEL_H
  3. #include <google/protobuf/service.h>
  4. #include <boost/unordered_map.hpp>
  5. #include <boost/asio.hpp>
  6. #include <boost/thread.hpp>
  7. #include "Base/Typedef.h"
  8. #include "Rpc/RpcTypedef.h"
  9. #include "Rpc/RpcCommunicator.h"
  10. namespace Egametang {
  11. class RpcHandler;
  12. class RpcChannel:
  13. public google::protobuf::RpcChannel, public RpcCommunicator,
  14. public boost::enable_shared_from_this<RpcChannel>
  15. {
  16. private:
  17. typedef boost::unordered_map<std::size_t, RequestHandlerPtr> RequestHandlerMap;
  18. std::size_t id;
  19. RequestHandlerMap request_handlers;
  20. void OnAsyncConnect(const boost::system::error_code& err);
  21. virtual void OnRecvMessage(RpcMetaPtr meta, StringPtr message);
  22. virtual void OnSendMessage(RpcMetaPtr meta, StringPtr message);
  23. public:
  24. RpcChannel(boost::asio::io_service& service, std::string host, int port);
  25. ~RpcChannel();
  26. virtual void Stop();
  27. virtual void CallMethod(
  28. const google::protobuf::MethodDescriptor* method,
  29. google::protobuf::RpcController* controller,
  30. const google::protobuf::Message* request,
  31. google::protobuf::Message* response,
  32. google::protobuf::Closure* done);
  33. };
  34. } // namespace Egametang
  35. #endif // RPC_RPCCHANNEL_H