void SSDBMultiSetWaitReply::mergeAndSend(ClientLogicSession* client) { if (mIsError) { SSDBProtocolRequest errorResponse; errorResponse.writev("error"); errorResponse.endl(); client->send(errorResponse.getResult(), errorResponse.getResultLen()); } else { if (mWaitResponses.size() == 1) { client->send(mWaitResponses.front().reply->c_str(), mWaitResponses.front().reply->size()); } else { string* errorReply = nullptr; int64_t num = 0; SSDBProtocolRequest megreResponse; for (auto& v : mWaitResponses) { int64_t tmp; if (read_int64(v.ssdbReply, &tmp).ok()) { num += tmp; } else { errorReply = v.reply; break; } } if (errorReply != nullptr) { client->send(errorReply->c_str(), errorReply->size()); } else { SSDBProtocolRequest megreResponse; megreResponse.writev("ok", num); megreResponse.endl(); client->send(megreResponse.getResult(), megreResponse.getResultLen()); } } } }
void SSDBSingleWaitReply::mergeAndSend(ClientLogicSession* client) { assert(mWaitResponses.size() == 1); if (!mIsError) { client->send(mWaitResponses.front().reply->c_str(), mWaitResponses.front().reply->size()); } else { /* TODO::缓存错误的response对象,进行多次使用,避免多次构造 */ SSDBProtocolRequest errorResponse; errorResponse.writev("error"); errorResponse.endl(); client->send(errorResponse.getResult(), errorResponse.getResultLen()); } }