void forkOutList(int socket) /* Fork instance of self to send list of all things tracked * down socket. */ { if (fork() == 0) { returnList(socket); exit(0); } else { clearZombies(); } }
SLevelListPtr CPlayerLevels::SaveLevel( CLevel& level ) { char IdString[50]; sprintf_s(IdString,49,"%d",gPlaytomic->GameId()); std::string url = kPlayerLevelSaveUrl1 + gPlaytomic->GetGameGuid() +kPlayerLevelSaveUrl2 + IdString + kPlayerLevelSaveUrl3 + gPlaytomic->GetSourceUrl(); CPost postData; postData.AddText("data", level.GetData().c_str()); postData.AddText("playerid", level.GetPlayerId().c_str()); postData.AddText("playername", level.GetPlayerName().c_str()); postData.AddText("playersource", level.GetPlayerSource().c_str()); postData.AddText("name",level.GetName().c_str()); postData.AddText("nothumb", "y"); sprintf_s(IdString, 49, "%d", level.GetCustomData().size()); postData.AddText("customfields", IdString); const CustomData& customData = level.GetCustomData(); CustomData::const_iterator it = customData.begin(); int fieldNumber = 0; for (; it != customData.end(); it++) { char buff[10]; sprintf_s(buff,9,"%d", fieldNumber); std::string ckey("ckey"); std::string cdata("cdata"); ckey += buff; cdata += buff; postData.AddText(ckey.c_str(), it->first.c_str()); postData.AddText(cdata.c_str(), it->second.c_str()); } CPlaytomicResponsePtr response = gConnectionInterface->PerformSyncRequest(url.c_str(), &postData); SLevelListPtr returnList(new SLevelList); returnList->sErrorCode = response->ResponseError(); returnList->sSucceded = response->ResponseSucceded(); if(!response->ResponseSucceded()) { return returnList; } FData id; id = response->ResponseData().get("LevelId", id); std::list<CLevel> levelList; AddLevel(response->ResponseData(), id.asString(), returnList->sLevelList); return returnList; }
SLevelListPtr CPlayerLevels::LoadLevel( const std::string& levelId ) { char IdString[50]; sprintf_s(IdString,49,"%d",gPlaytomic->GameId()); std::string url = kPlayerLevelUrl1 + gPlaytomic->GetGameGuid() +kPlayerLevelUrl2 + IdString + kPlayerLevelUrl3 + levelId; CPlaytomicResponsePtr response = gConnectionInterface->PerformSyncRequest(url.c_str()); SLevelListPtr returnList(new SLevelList); returnList->sErrorCode = response->ResponseError(); returnList->sSucceded = response->ResponseSucceded(); if(!response->ResponseSucceded()) { return returnList; } AddLevel(response->ResponseData(), levelId, returnList->sLevelList); return returnList; }
SLevelListPtr CPlayerLevels::List( const std::string& mode, int page, int perPage, bool includeData, bool includeThumbs, const CustomData& customFilter ) { std::string modeSafe = mode.empty() ? "popular" : (mode == "newest" || mode == "popular" ? mode : "popular"); char dataSafe = includeData ? 'y': 'n'; char thumSafe = includeThumbs ? 'y': 'n'; char IdString[50]; sprintf_s(IdString,49,"%d",gPlaytomic->GameId()); std::string url = kPlayerLevelListUrl1 + gPlaytomic->GetGameGuid() +kPlayerLevelListUrl2 + IdString + kPlayerLevelListUrl3 + modeSafe; sprintf_s(IdString,49,"%d", page); url += kPlayerLevelListUrl4 + page; sprintf_s(IdString,49,"%d", perPage); url += kPlayerLevelListUrl5; url += IdString; url += kPlayerLevelListUrl6; url += dataSafe; url += kPlayerLevelListUrl7; url += thumSafe; sprintf_s(IdString,49,"%d", customFilter.size()); url += kPlayerLevelListUrl10; url += IdString; CPost postData; if(!customFilter.empty()) { int fieldNumber = 0; CustomData::const_iterator it = customFilter.begin(); for(; it != customFilter.end(); it++) { char buff[10]; sprintf_s(buff,9,"%d", fieldNumber); std::string ckey("ckey"); std::string cdata("cdata"); ckey += buff; cdata += buff; postData.AddText(ckey.c_str(), it->first.c_str()); postData.AddText(cdata.c_str(), it->second.c_str()); } } CPlaytomicResponsePtr response = gConnectionInterface->PerformSyncRequest(url.c_str(), &postData); SLevelListPtr returnList( new SLevelList); returnList->sErrorCode = response->ResponseError(); returnList->sSucceded = response->ResponseSucceded(); if (!returnList->sSucceded) { return returnList; } FData levelArray(Json::arrayValue); const FData& queryData = response->ResponseData(); FData ScoreList; levelArray = queryData.get("Levels", levelArray); FData value; value = queryData.get("NumLevels", value); for (size_t i = 0; i < levelArray.size(); i++) { value = levelArray[(int)i].get("LevelId", value); AddLevel(levelArray[(int)i], value.asString(), returnList->sLevelList); } return returnList; }