RpcCommunicator.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef RPC_RPCCOMMUNICATOR_H
  2. #define RPC_RPCCOMMUNICATOR_H
  3. #include <google/protobuf/service.h>
  4. #include <unordered_map>
  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/Typedef.h"
  11. namespace Egametang {
  12. class RpcMeta
  13. {
  14. public:
  15. std::size_t size;
  16. std::size_t id;
  17. std::size_t method;
  18. RpcMeta(): size(0), id(0), method(0)
  19. {
  20. }
  21. std::string ToString()
  22. {
  23. boost::format format("size: %1%, id: %2%, method: %3%\n");
  24. return boost::str(format % size % id % method);
  25. }
  26. };
  27. class RpcCommunicator: public boost::noncopyable
  28. {
  29. protected:
  30. boost::asio::io_service& ioService;
  31. boost::asio::ip::tcp::socket socket;
  32. virtual void Stop();
  33. public:
  34. explicit RpcCommunicator(boost::asio::io_service& io_service);
  35. virtual ~RpcCommunicator();
  36. boost::asio::ip::tcp::socket& Socket();
  37. // recieve response
  38. void RecvMeta(RpcMetaPtr meta, StringPtr message);
  39. void RecvMessage(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  40. void RecvDone(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  41. virtual void OnRecvMessage(RpcMetaPtr meta, StringPtr message);
  42. // send request
  43. void SendMeta(RpcMetaPtr meta, StringPtr message);
  44. void SendMessage(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  45. void SendDone(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  46. virtual void OnSendMessage(RpcMetaPtr meta, StringPtr message);
  47. };
  48. } // namespace Egametang
  49. #endif // RPC_RPCCOMMUNICATOR_H