RpcSession.cc 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "Net/RpcSession.h"
  2. namespace Hainan {
  3. RpcSession::RpcSession(RpcSessionSet& rpc_sessions): sessions(rpc_sessions)
  4. {
  5. }
  6. boost::asio::ip::tcp::socket& RpcSession::Socket()
  7. {
  8. return socket;
  9. }
  10. void RpcSession::RecvMessegeSize()
  11. {
  12. IntPtr size(new int);
  13. boost::asio::async_read(socket,
  14. boost::asio::buffer(
  15. reinterpret_cast<char*>(size.get()), sizeof(int)),
  16. boost::bind(&RpcChannel::RecvMessage, this, size,
  17. boost::asio::placeholders::error));
  18. }
  19. void RpcSession::RecvMessage(IntPtr size, const boost::system::error_code& err)
  20. {
  21. if (err)
  22. {
  23. LOG(ERROR) << "receive request size failed";
  24. return;
  25. }
  26. StringPtr ss;
  27. boost::asio::async_read(socket,
  28. boost::asio::buffer(*ss, *size),
  29. boost::bind(&RpcSession::RecvMessageHandler, this, ss,
  30. boost::asio::placeholders::error));
  31. }
  32. void RpcSession::RecvMessageHandler(StringPtr ss,
  33. const boost::system::error_code& err)
  34. {
  35. if (err)
  36. {
  37. LOG(ERROR) << "receive request message failed";
  38. return;
  39. }
  40. RpcRequest request;
  41. request->ParseFromString(*ss);
  42. // read size
  43. RecvMessegeSize();
  44. }
  45. void RpcSession::Start()
  46. {
  47. RecvMessegeSize();
  48. }
  49. void RpcSession::Stop()
  50. {
  51. socket.close();
  52. sessions.erase(shared_from_this());
  53. }
  54. }