ResponseHandler.cc 1.2 KB

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