ResponseHandler.cc 996 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "Rpc/MethodInfo.h"
  2. #include "Rpc/ResponseHandler.h"
  3. #include "Rpc/RpcCommunicator.h"
  4. namespace Egametang {
  5. ResponseHandler::ResponseHandler(
  6. MethodInfoPtr& method_info, std::size_t id, MessageHandler& message_handler):
  7. id(id), message_handler(message_handler)
  8. {
  9. method = method_info->method_descriptor;
  10. request = method_info->request_prototype->New();
  11. response = method_info->response_prototype->New();
  12. }
  13. ResponseHandler::~ResponseHandler()
  14. {
  15. delete request;
  16. delete response;
  17. }
  18. const google::protobuf::MethodDescriptor* ResponseHandler::Method()
  19. {
  20. return method;
  21. }
  22. google::protobuf::Message* ResponseHandler::Request()
  23. {
  24. return request;
  25. }
  26. google::protobuf::Message* ResponseHandler::Response()
  27. {
  28. return response;
  29. }
  30. void ResponseHandler::Run()
  31. {
  32. RpcMetaPtr meta(new RpcMeta());
  33. StringPtr message(new std::string);
  34. response->SerializeToString(message.get());
  35. meta->id = id;
  36. meta->size = message->size();
  37. message_handler(meta, message);
  38. }
  39. } // namespace Egametang