void CodisClient::mget2Callback(redisAsyncContext *c, void *r, void *privdata) { // mget异步调用的回调函数 // 合并结果数据到merger, 在最后一个mget回调处理完成后,通过cv通知 redisReply *reply = (redisReply*) r; MgetAsyncRequestContext *rctxt = (MgetAsyncRequestContext*) privdata; KVMap kvmap; // printf("result count: %d\n", reply->elements); for (size_t i = 0; i < reply->elements; ++i) { string value = std::string(reply->element[i]->str, reply->element[i]->len); string user_key = rctxt->user_keylist_[i]; // printf("callback, key:(%s), value(%s), counter(%d)\n", user_key.c_str(), value.c_str(), rctxt->merger_->counter_); kvmap.insert(make_pair(user_key, value)); } (rctxt->callback)(kvmap); rctxt->client->returnAsync(*(rctxt->async_context)); if (rctxt != NULL) { delete rctxt; rctxt = NULL; } }
bool Utils::_loadConfig(const char *filename, rapidjson::Document &doc, KVMap &kvmap, bool &bLoaded) { std::string fullPath = FileUtils::getInstance()->fullPathForFilename(filename); std::string fileContent = FileUtils::getInstance()->getStringFromFile(fullPath); doc.Parse<0>(fileContent.c_str()); if (doc.HasParseError()) { CCLOG("GetParseError %s\n", doc.GetParseError()); return false; } for (rapidjson::Value::ConstMemberIterator it=doc.MemberonBegin(); it!=doc.MemberonEnd(); ++it) { const auto &member = *it; const char *name = member.name.GetString(); const rapidjson::Value &val = member.value; kvmap.insert(Utils::KVMapPair(name, val)); } bLoaded = true; return true; }
// Set plugin to use in export void Aten::setExportModelPlugin(const FilePluginInterface* plugin, KVMap pluginOptions) { exportModelPlugin_ = plugin; for (KVPair* pair = pluginOptions.pairs(); pair != NULL; pair = pair->next) exportModelPluginOptions_.add(pair->key(), pair->value()); }