bool MongodbClient::SaveBinary(const String &key, uint8 *data, int32 dataSize) { int32 status = MONGO_ERROR; if(IsConnected()) { MongodbObject * binary = new MongodbObject(); DVASSERT(binary); binary->SetObjectName(key); binary->AddInt32(String("DataSize").c_str(), dataSize); binary->AddData(String("Data").c_str(), data, dataSize); binary->Finish(); MongodbObject *foundObject = FindObjectByKey(key); if(foundObject) { status = mongo_update(clientData->connection, namespaceName.c_str(), (bson *)foundObject->InternalObject(), (bson *)binary->InternalObject(), 0, NULL); if(MONGO_OK != status) { LogError(String("SaveBinary, update"), clientData->connection->err); } SafeRelease(foundObject); } else { status = mongo_insert(clientData->connection, namespaceName.c_str(), (bson *)binary->InternalObject(), NULL); if(MONGO_OK != status) { LogError(String("SaveBinary, insert"), clientData->connection->err); } } SafeRelease(binary); } return (MONGO_OK == status); }
bool GameCore::FlushToDB(const String & levelName, const Map<String, String> &results, const String &imagePath) { if(!dbClient) return false; Logger::Debug("Sending results to DB..."); MongodbObject *testResultObject = new MongodbObject(); if(testResultObject) { testResultObject->SetObjectName(levelName); Map<String, String>::const_iterator it = results.begin(); for(; it != results.end(); it++) { testResultObject->AddString((*it).first, (*it).second); } File * imageFile = File::Create(imagePath, File::READ | File::OPEN); if(imageFile) { uint32 fileSize = imageFile->GetSize(); uint8 * data = new uint8[fileSize]; imageFile->Read(data, fileSize); testResultObject->AddData("ResultImagePNG", data, fileSize); SafeDelete(data); SafeRelease(imageFile); } else { Logger::Debug("Can't read result level sprite!"); } testResultObject->Finish(); MongodbObject * currentRunObject = dbClient->FindObjectByKey(Format("%d", currentRunId)); MongodbObject * newRunObject = new MongodbObject(); if(newRunObject) { if(currentRunObject) { newRunObject->Copy(currentRunObject); } else { newRunObject->SetObjectName(Format("%d", currentRunId)); newRunObject->AddString("DeviceDescription", DeviceInfo::Instance()->GetDeviceDescription()); } newRunObject->AddObject(levelName, testResultObject); newRunObject->Finish(); dbClient->SaveObject(newRunObject, currentRunObject); SafeRelease(newRunObject); } else { Logger::Debug("Can't create test result object in DB"); return false; } SafeRelease(currentRunObject); SafeRelease(testResultObject); } else { Logger::Debug("Can't create tests results object"); return false; } Logger::Debug("Results successful sent to DB"); return true; }