Esempio n. 1
0
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;
}
Esempio n. 2
0
			WanderBehaviorInitializer()
			{
				AddActivate(0xd1cc22c8 /* "wanderbehaviortemplate" */, ActivateEntry(this, &WanderBehaviorInitializer::Activate));
				AddDeactivate(0xd1cc22c8 /* "wanderbehaviortemplate" */, DeactivateEntry(this, &WanderBehaviorInitializer::Deactivate));
			}