RpcCommunicator.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef RPC_RPCCOMMUNICATOR_H
  2. #define RPC_RPCCOMMUNICATOR_H
  3. #include <google/protobuf/service.h>
  4. #include <boost/unordered_map.hpp>
  5. #include <boost/asio.hpp>
  6. #include <boost/format.hpp>
  7. #include <boost/noncopyable.hpp>
  8. #include "Base/Marcos.h"
  9. #include "Base/Typedef.h"
  10. #include "Rpc/RpcTypedef.h"
  11. namespace Egametang {
  12. struct RpcMeta
  13. {
  14. // message长度
  15. std::size_t size;
  16. // 消息id, 用于处理异步回调
  17. std::size_t id;
  18. // 消息opcode, 是proto的full_path哈希值
  19. std::size_t method;
  20. RpcMeta(): size(0), id(0), method(0)
  21. {
  22. }
  23. std::string ToString()
  24. {
  25. boost::format format("size: %1%, id: %2%, method: %3%\n");
  26. return boost::str(format % size % id % method);
  27. }
  28. };
  29. class RpcCommunicator: public boost::noncopyable
  30. {
  31. private:
  32. boost::asio::io_service& io_service;
  33. boost::asio::ip::tcp::socket socket;
  34. public:
  35. explicit RpcCommunicator(boost::asio::io_service& io_service);
  36. virtual ~RpcCommunicator();
  37. boost::asio::ip::tcp::socket& Socket();
  38. virtual void Stop();
  39. // recieve response
  40. void RecvMeta(RpcMetaPtr meta, StringPtr message);
  41. void RecvMessage(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  42. void RecvDone(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  43. virtual void OnRecvMessage(RpcMetaPtr meta, StringPtr message);
  44. // send request
  45. void SendMeta(RpcMetaPtr meta, StringPtr message);
  46. void SendMessage(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  47. void SendDone(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  48. virtual void OnSendMessage(RpcMetaPtr meta, StringPtr message);
  49. };
  50. } // namespace Egametang
  51. #endif // RPC_RPCCOMMUNICATOR_H