void SSDBMultiClient::forgeError(const string& error, std::function<void(const string&)>& callback) { if (callback != nullptr) { SSDBProtocolRequest err; err.appendStr(error); err.endl(); std::shared_ptr<string > response = std::make_shared<string>(err.getResult(), err.getResultLen()); mLogicFunctorMQ.Push([callback, response](){ callback(*response); }); } }
void SSDBMultiClient::sendPing(DataSocket::PTR ds) { DBServerUserData* dbUserData = (DBServerUserData*)ds->getUserData(); if (dbUserData->pingTime > 0) { SSDBProtocolRequest sr; sr.init(); sr.appendStr("ping"); sr.endl(); ds->send(sr.getResult(), sr.getResultLen()); /*自动发送的ping操作,也要模拟一个完成回调,不然会导致业务上的请求乱序*/ queue<std::function<void(const string& response)>>* callbacklist = dbUserData->callbacklist; callbacklist->push(nullptr); dbUserData->pingTimer = mNetService.getTimerMgr().AddTimer(dbUserData->pingTime, [this, ds](){ sendPing(ds); }); } }