RUDataTransMgr.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //
  2. // RUDataTransMgr.cpp
  3. // base_world_ios
  4. //
  5. // Created by ZhengSong on 2023/2/28.
  6. //
  7. #include "RUDataTransMgr.h"
  8. NS_RU_BEGIN
  9. DataTransMgr::DataTransMgr() {}
  10. DataTransMgr::~DataTransMgr() {
  11. CC_SAFE_DELETE(_zmqReq);
  12. CC_SAFE_DELETE(_zmqSub);
  13. CC_SAFE_DELETE(_zmqPub);
  14. CC_SAFE_DELETE(_zmqRep);
  15. }
  16. static DataTransMgr* _instance = nullptr;
  17. DataTransMgr* DataTransMgr::getInstance() {
  18. if(_instance == nullptr) {
  19. _instance = new DataTransMgr();
  20. }
  21. return _instance;
  22. }
  23. void DataTransMgr::connectSync(const std::string& sender, const std::string& receiver) {
  24. if(_zmqReq || _zmqSub) {
  25. CCASSERT(false, "重复连接");
  26. return;
  27. }
  28. _zmqReq = new red_zmq::Req(sender);
  29. _zmqSub = new red_zmq::Sub(receiver, CC_CALLBACK_1(DataTransMgr::_handlePubMessage, this));
  30. }
  31. void DataTransMgr::connectAsync(const std::string& sender, const std::string& receiver) {
  32. if(_zmqPub || _zmqRep) {
  33. CCASSERT(false, "重复连接");
  34. return;
  35. }
  36. _zmqPub = new red_zmq::Pub(sender);
  37. _zmqRep = new red_zmq::Rep(receiver, CC_CALLBACK_1(DataTransMgr::_handleReqMessage, this));
  38. }
  39. void DataTransMgr::sendMsgToSubscriber(const std::string& command, const std::string& data) {
  40. CCASSERT(_zmqPub, "");
  41. if(_zmqPub) {
  42. Json::object obj;
  43. obj["action"] = Json(command);
  44. obj["data"] = Json(data);
  45. Json msg(obj);
  46. _zmqPub->pubMsg(msg.dump().c_str());
  47. }
  48. }
  49. std::string DataTransMgr::requestMsg(const std::string& command, const std::string& data) {
  50. CCASSERT(_zmqReq, "");
  51. if(_zmqReq) {
  52. Json::object obj;
  53. obj["action"] = Json(command);
  54. obj["data"] = Json(data);
  55. Json msg(obj);
  56. return _zmqReq->sendMsg(msg.dump().c_str());
  57. }
  58. return "";
  59. }
  60. void DataTransMgr::setDataTransDelegate(DataTransDelegate* delegate) {
  61. _dataTransDelegate = delegate;
  62. }
  63. void DataTransMgr::_handlePubMessage(const std::string& msg) {
  64. std::string err;
  65. Json js = Json::parse(msg, err);
  66. if(err.size() > 0) {
  67. CCASSERT(false, "解析出错");
  68. return ;
  69. }
  70. std::string command = js["action"].string_value();
  71. std::string data = js["data"].string_value();
  72. CCASSERT(_dataTransDelegate, "请设置代理");
  73. if(_dataTransDelegate) {
  74. return _dataTransDelegate->handleReceiveMessageFromPub(command, data);
  75. }
  76. }
  77. std::string DataTransMgr::_handleReqMessage(const std::string& msg) {
  78. std::string err;
  79. Json js = Json::parse(msg, err);
  80. if(err.size() > 0) {
  81. CCASSERT(false, "解析出错");
  82. return "";
  83. }
  84. std::string command = js["action"].string_value();
  85. std::string data = js["data"].string_value();
  86. CCASSERT(_dataTransDelegate, "请设置代理");
  87. if(_dataTransDelegate) {
  88. return _dataTransDelegate->handleReceiveMsgFromReq(command, data);
  89. }
  90. return "";
  91. }
  92. NS_RU_END