RpcCommunicator.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. 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. bool isStopped;
  31. boost::asio::io_service& ioService;
  32. boost::asio::ip::tcp::socket socket;
  33. public:
  34. explicit RpcCommunicator(boost::asio::io_service& io_service);
  35. virtual ~RpcCommunicator();
  36. boost::asio::ip::tcp::socket& Socket();
  37. virtual void Stop();
  38. // recieve response
  39. void RecvMeta(RpcMetaPtr meta, StringPtr message);
  40. void RecvMessage(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  41. void RecvDone(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  42. virtual void OnRecvMessage(RpcMetaPtr meta, StringPtr message);
  43. // send request
  44. void SendMeta(RpcMetaPtr meta, StringPtr message);
  45. void SendMessage(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  46. void SendDone(RpcMetaPtr meta, StringPtr message, const boost::system::error_code& err);
  47. virtual void OnSendMessage(RpcMetaPtr meta, StringPtr message);
  48. };
  49. } // namespace Egametang
  50. #endif // RPC_RPCCOMMUNICATOR_H