void CPremiumPlayerCtrl:: LoadIniFile(const char* szpIniFileName,struct i3client_t::tagPremiumInfo* pPremium) { char AppName[_MAX_PATH]; char inStr[_MAX_PATH]; char Session[_MAX_PATH]; for(int idx=0; idx < i3client_t::tagPremiumInfo::maxmap_number; idx++){ wsprintf(AppName,"Map%02d",idx); ::GetPrivateProfileString(AppName,"Allow","YES",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.bAllow = GetBOOL(inStr); ::GetPrivateProfileString(AppName,"iRemainSecond","2147483647",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.iRemainSecond=GetINT(inStr); ::GetPrivateProfileString(AppName,"bDecreseRemainSecond","NO",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.bDecreseRemainSecond=GetBOOL(inStr); ::GetPrivateProfileString(AppName,"bDecreseAllRemainSecond","NO",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.bDecreseAllRemainSecond = GetBOOL(inStr); ::GetPrivateProfileString(AppName,"fAddExpRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.fAddExpRatio = GetFLOAT(inStr); ::GetPrivateProfileString(AppName,"fAddGenExpRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.fAddGenExpRatio = GetFLOAT(inStr); ::GetPrivateProfileString(AppName,"fAddGenCapabilityRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.fAddGenCapabilityRatio=GetFLOAT(inStr); ::GetPrivateProfileString(AppName,"fAddItemDropRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.fAddItemDropRatio =GetFLOAT(inStr); ::GetPrivateProfileString(AppName,"fAddNarkRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->Map[idx].Default.fAddNarkRatio = GetFLOAT(inStr); pPremium->Map[idx].Cur = pPremium->Map[idx].Default; } wsprintf(AppName,"Gameble"); ::GetPrivateProfileString(AppName,"fAddPriceRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->Gamble.fAddPriceRatio = GetFLOAT(inStr); for(idx=0; idx < i3client_t::tagPremiumInfo::tagGamble::maxnum_apperance_item_group; idx++){ wsprintf(Session,"Group%02d"); ::GetPrivateProfileString(AppName,Session,"YES",inStr,_MAX_PATH,szpIniFileName); pPremium->Gamble.ItemGroupArray[idx].bApperance=GetBOOL(inStr); } wsprintf(AppName,"ItemOptionUpgrade"); ::GetPrivateProfileString(AppName,"iMaxlevel","10",inStr,_MAX_PATH,szpIniFileName); pPremium->ItemOptionUpgrade.iMaxlevel = GetINT(inStr); ::GetPrivateProfileString(AppName,"fAddPriceRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->ItemOptionUpgrade.fAddPriceRatio = GetFLOAT(inStr); wsprintf(AppName,"Die"); ::GetPrivateProfileString(AppName,"fExpRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->Die.fExpRatio = GetFLOAT(inStr); ::GetPrivateProfileString(AppName,"fNakRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->Die.fNakRatio = GetFLOAT(inStr); ::GetPrivateProfileString("PremiumBooth","Use","FALSE",inStr,_MAX_PATH,szpIniFileName); pPremium->bCreatePremiumBooth = GetBOOL(inStr); ::GetPrivateProfileString("ItemCraft","iMaxLevel","10",inStr,_MAX_PATH,szpIniFileName); pPremium->iMaxLevelItemCraft = GetINT(inStr); ::GetPrivateProfileString("ItemPrecocity","TimeRatio","1.0f",inStr,_MAX_PATH,szpIniFileName); pPremium->fItemPrecocityTimeRatio = GetFLOAT(inStr); ::GetPrivateProfileString("ItemRecycle","Use","YES",inStr,_MAX_PATH,szpIniFileName); pPremium->bItemRecycle = GetBOOL(inStr); pPremium->GonyounPracticeBattle.lDate = time(NULL); ::GetPrivateProfileString("GonyounPracticeBattle","iMaxCount","5",inStr,_MAX_PATH,szpIniFileName); pPremium->GonyounPracticeBattle.iMaxCount = GetINT(inStr); pPremium->GonyounPracticeBattle.iDecreseCount = pPremium->GonyounPracticeBattle.iMaxCount; pPremium->WorldChatting.lDate = time(NULL); ::GetPrivateProfileString("WorldChatting","iMaxCount","10",inStr,_MAX_PATH,szpIniFileName); pPremium->WorldChatting.iMaxCount = GetINT(inStr); pPremium->WorldChatting.iDecreaseCount = pPremium->WorldChatting.iMaxCount; ::GetPrivateProfileString("Status","iDefaultInitCount","1",inStr,_MAX_PATH,szpIniFileName); pPremium->Status.iDefaultInitCount= GetINT(inStr); ::GetPrivateProfileString("Status","iInitCount","1000",inStr,_MAX_PATH,szpIniFileName); pPremium->Status.iInitCount=GetINT(inStr); }
HRESULT CModuleConfiguration::GetConfig(IHttpContext* context, CModuleConfiguration** config) { HRESULT hr; CModuleConfiguration* c = NULL; IAppHostElement* section = NULL; LPWSTR commandLine = NULL; size_t i; CheckNull(config); *config = (CModuleConfiguration*)context->GetMetadata()->GetModuleContextContainer()->GetModuleContext(moduleId); if (NULL == *config) { ErrorIf(NULL == (c = new CModuleConfiguration()), ERROR_NOT_ENOUGH_MEMORY); CheckError(GetConfigSection(context, §ion)); CheckError(GetDWORD(section, L"maxPendingRequestsPerApplication", &c->maxPendingRequestsPerApplication)); CheckError(GetDWORD(section, L"asyncCompletionThreadCount", &c->asyncCompletionThreadCount)); CheckError(GetDWORD(section, L"maxProcessCountPerApplication", &c->maxProcessCountPerApplication)); CheckError(GetDWORD(section, L"maxConcurrentRequestsPerProcess", &c->maxConcurrentRequestsPerProcess)); CheckError(GetDWORD(section, L"maxNamedPipeConnectionRetry", &c->maxNamedPipeConnectionRetry)); CheckError(GetDWORD(section, L"namedPipeConnectionRetryDelay", &c->namedPipeConnectionRetryDelay)); CheckError(GetDWORD(section, L"initialRequestBufferSize", &c->initialRequestBufferSize)); CheckError(GetDWORD(section, L"maxRequestBufferSize", &c->maxRequestBufferSize)); CheckError(GetDWORD(section, L"uncFileChangesPollingInterval", &c->uncFileChangesPollingInterval)); CheckError(GetDWORD(section, L"gracefulShutdownTimeout", &c->gracefulShutdownTimeout)); CheckError(GetDWORD(section, L"logFileFlushInterval", &c->logFileFlushInterval)); CheckError(GetDWORD(section, L"maxLogFileSizeInKB", &c->maxLogFileSizeInKB)); CheckError(GetBOOL(section, L"loggingEnabled", &c->loggingEnabled)); CheckError(GetBOOL(section, L"appendToExistingLog", &c->appendToExistingLog)); CheckError(GetString(section, L"logDirectoryNameSuffix", &c->logDirectoryNameSuffix)); CheckError(GetString(section, L"debuggerPortRange", &c->debugPortRange)); CheckError(GetString(section, L"debuggerPathSegment", &c->debuggerPathSegment)); c->debuggerPathSegmentLength = wcslen(c->debuggerPathSegment); CheckError(GetString(section, L"nodeProcessCommandLine", &commandLine)); ErrorIf(NULL == (c->nodeProcessCommandLine = new char[MAX_PATH]), ERROR_NOT_ENOUGH_MEMORY); ErrorIf(0 != wcstombs_s(&i, c->nodeProcessCommandLine, (size_t)MAX_PATH, commandLine, _TRUNCATE), ERROR_INVALID_PARAMETER); delete [] commandLine; commandLine = NULL; section->Release(); section = NULL; // CR: check for ERROR_ALREADY_ASSIGNED to detect a race in creation of this section // CR: refcounting may be needed if synchronous code paths proove too long (race with config changes) context->GetMetadata()->GetModuleContextContainer()->SetModuleContext(c, moduleId); *config = c; c = NULL; } return S_OK; Error: if (NULL != section) { section->Release(); section = NULL; } if (NULL != commandLine) { delete [] commandLine; commandLine = NULL; } if (NULL != c) { delete c; c = NULL; } return hr; }