ResponseHandler.cc 1.0 KB

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