RpcChannel.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. void HandleStop();
  24. public:
  25. RpcChannel(boost::asio::io_service& service, std::string host, int port);
  26. ~RpcChannel();
  27. virtual void Stop();
  28. virtual void CallMethod(
  29. const google::protobuf::MethodDescriptor* method,
  30. google::protobuf::RpcController* controller,
  31. const google::protobuf::Message* request,
  32. google::protobuf::Message* response,
  33. google::protobuf::Closure* done);
  34. };
  35. } // namespace Egametang
  36. #endif // RPC_RPCCHANNEL_H