// // RUDataTransMgr.cpp // base_world_ios // // Created by ZhengSong on 2023/2/28. // #include "RUDataTransMgr.h" NS_RU_BEGIN DataTransMgr::DataTransMgr() {} DataTransMgr::~DataTransMgr() { CC_SAFE_DELETE(_zmqReq); CC_SAFE_DELETE(_zmqSub); CC_SAFE_DELETE(_zmqPub); CC_SAFE_DELETE(_zmqRep); } static DataTransMgr* _instance = nullptr; DataTransMgr* DataTransMgr::getInstance() { if(_instance == nullptr) { _instance = new DataTransMgr(); } return _instance; } void DataTransMgr::connectSync(const std::string& sender, const std::string& receiver) { if(_zmqReq || _zmqSub) { CCASSERT(false, "重复连接"); return; } _zmqReq = new red_zmq::Req(sender); _zmqSub = new red_zmq::Sub(receiver, CC_CALLBACK_1(DataTransMgr::_handlePubMessage, this)); } void DataTransMgr::connectAsync(const std::string& sender, const std::string& receiver) { if(_zmqPub || _zmqRep) { CCASSERT(false, "重复连接"); return; } _zmqPub = new red_zmq::Pub(sender); _zmqRep = new red_zmq::Rep(receiver, CC_CALLBACK_1(DataTransMgr::_handleReqMessage, this)); } void DataTransMgr::sendMsgToSubscriber(const std::string& command, const std::string& data) { CCASSERT(_zmqPub, ""); if(_zmqPub) { Json::object obj; obj["action"] = Json(command); obj["data"] = Json(data); Json msg(obj); _zmqPub->pubMsg(msg.dump().c_str()); } } std::string DataTransMgr::requestMsg(const std::string& command, const std::string& data) { CCASSERT(_zmqReq, ""); if(_zmqReq) { Json::object obj; obj["action"] = Json(command); obj["data"] = Json(data); Json msg(obj); return _zmqReq->sendMsg(msg.dump().c_str()); } return ""; } void DataTransMgr::setDataTransDelegate(DataTransDelegate* delegate) { _dataTransDelegate = delegate; } void DataTransMgr::_handlePubMessage(const std::string& msg) { std::string err; Json js = Json::parse(msg, err); if(err.size() > 0) { CCASSERT(false, "解析出错"); return ; } std::string command = js["action"].string_value(); std::string data = js["data"].string_value(); CCASSERT(_dataTransDelegate, "请设置代理"); if(_dataTransDelegate) { return _dataTransDelegate->handleReceiveMessageFromPub(command, data); } } std::string DataTransMgr::_handleReqMessage(const std::string& msg) { std::string err; Json js = Json::parse(msg, err); if(err.size() > 0) { CCASSERT(false, "解析出错"); return ""; } std::string command = js["action"].string_value(); std::string data = js["data"].string_value(); CCASSERT(_dataTransDelegate, "请设置代理"); if(_dataTransDelegate) { return _dataTransDelegate->handleReceiveMsgFromReq(command, data); } return ""; } NS_RU_END