int clsEntityWorker::DoWithTimeout() { int iExpiredCnt = 0; EntryInfo_t *ptInfo; while ((ptInfo = m_poEntryMng->TakeTimeout()) != NULL) { uint32_t iEntityID = ptInfo->iEntityID; uint32_t iEntry = ptInfo->iEntry; if (ptInfo->bUncertain) { m_poEntryMng->AddTimeout(ptInfo, 10); CertainLogDebug("iEntityID %u iEntry %u wait 10ms for uncertain", iEntityID, iEntry); continue; } // (TODO)rock: it must retry, when it's uncertain EntityInfo_t *ptEntityInfo = m_poEntityMng->GetEntityInfo(iEntityID); if (ptInfo->bDBPending || ptEntityInfo->bDBPending) { assert(ptInfo->bDBPending && ptEntityInfo->bDBPending); ptInfo->bDBPending = false; ptEntityInfo->bDBPending = false; } if (ptEntityInfo->poClientCmd != NULL && ptEntityInfo->poClientCmd->GetEntry() == iEntry) { InvalidClientCmd(ptEntityInfo, " : Timeout"); } iExpiredCnt++; ActivateEntry(ptInfo); } if (iExpiredCnt > 0) { CertainLogError("iExpiredCnt %d", iExpiredCnt); } return 0; }
WanderBehaviorInitializer() { AddActivate(0xd1cc22c8 /* "wanderbehaviortemplate" */, ActivateEntry(this, &WanderBehaviorInitializer::Activate)); AddDeactivate(0xd1cc22c8 /* "wanderbehaviortemplate" */, DeactivateEntry(this, &WanderBehaviorInitializer::Deactivate)); }