示例#1
0
BOOL CJabberIqManager::DeleteHandler(CJabberIqInfo *pInfo)
{
	// returns TRUE when pInfo found, or FALSE otherwise
	mir_cslockfull lck(m_cs);
	if (!m_pIqs)
		return FALSE;

	if (m_pIqs == pInfo) { // check first item
		m_pIqs = m_pIqs->m_pNext;
		lck.unlock();
		ExpireInfo(pInfo); // must expire it to allow the handler to free m_pUserData if necessary
		delete pInfo;
		return TRUE;
	}

	CJabberIqInfo *pTmp = m_pIqs;
	while (pTmp->m_pNext) {
		if (pTmp->m_pNext == pInfo) {
			pTmp->m_pNext = pTmp->m_pNext->m_pNext;
			lck.unlock();
			ExpireInfo(pInfo); // must expire it to allow the handler to free m_pUserData if necessary
			delete pInfo;
			return TRUE;
		}
		pTmp = pTmp->m_pNext;
	}
	return FALSE;
}
示例#2
0
void CJabberIqManager::ExpirerThread()
{
	while (!m_bExpirerThreadShutdownRequest)
	{
		Lock();
		CJabberIqInfo* pInfo = DetachExpired();
		Unlock();
		if (!pInfo)
		{
			for (int i = 0; !m_bExpirerThreadShutdownRequest && (i < 10); i++)
				Sleep(50);

			// -1 thread :)
			ppro->m_adhocManager.ExpireSessions();
			continue;
		}
		ExpireInfo( pInfo );
		delete pInfo;
	}

	if ( !m_bExpirerThreadShutdownRequest ) {
		CloseHandle( m_hExpirerThread );
		m_hExpirerThread = NULL;
	}
}
示例#3
0
bool CJabberIqManager::ExpireByUserData(void *pUserData)
{
	bool bRet = false;
	while (CJabberIqInfo *pInfo = DetouchInfo(pUserData)) {
		ExpireInfo(pInfo);
		bRet = true;
	}
	return bRet;
}
示例#4
0
BOOL CJabberIqManager::ExpireByUserData(void *pUserData)
{
	while (true) {
		CJabberIqInfo *pInfo = DetachInfo(pUserData);
		if (!pInfo)
			return FALSE;
			
		ExpireInfo(pInfo, NULL);
		delete pInfo;
		return TRUE;
	}
}
示例#5
0
BOOL CJabberIqManager::ExpireIq(int nIqId)
{
	CJabberIqInfo *pInfo = DetachInfo(nIqId);
	if (pInfo) {
		do {
			ExpireInfo(pInfo);
			delete pInfo;
		}
			while ((pInfo = DetachInfo(nIqId)) != NULL);
		return TRUE;
	}
	return FALSE;
}
示例#6
0
bool CJabberIqManager::DeleteHandler(CJabberIqInfo *pInfo)
{
	// returns TRUE when pInfo found, or FALSE otherwise
	mir_cslockfull lck(m_cs);

	for (int i = 0; i < m_arIqs.getCount(); i++) {
		if (m_arIqs[i] == pInfo) {
			m_arIqs.remove(i);
			lck.unlock();
			ExpireInfo(pInfo); // must expire it to allow the handler to free m_pUserData if necessary
			return true;
		}
	}

	return false;
}
示例#7
0
BOOL CJabberIqManager::ExpireAll(void *pUserData)
{
	while (true) {
		CJabberIqInfo *pInfo;
		{
			mir_cslock lck(m_cs);
			pInfo = m_pIqs;
			if (pInfo)
				m_pIqs = m_pIqs->m_pNext;
		}
		if (!pInfo)
			break;
		pInfo->m_pNext = NULL;
		ExpireInfo(pInfo, pUserData);
		delete pInfo;
	}
	return TRUE;
}
示例#8
0
void CJabberIqManager::ExpirerThread()
{
	Thread_SetName("Jabber: ExpirerThread");

	while (!m_bExpirerThreadShutdownRequest) {
		CJabberIqInfo *pInfo = DetouchExpired();
		if (!pInfo) {
			for (int i=0; !m_bExpirerThreadShutdownRequest && (i < 10); i++)
				Sleep(50);

			// -1 thread :)
			ppro->m_adhocManager.ExpireSessions();
			continue;
		}
		ExpireInfo(pInfo);
	}

	if (!m_bExpirerThreadShutdownRequest) {
		CloseHandle(m_hExpirerThread);
		m_hExpirerThread = NULL;
	}
}
示例#9
0
void CJabberIqManager::ExpireAll()
{
	while (CJabberIqInfo *pInfo = DetouchInfo())
		ExpireInfo(pInfo);
}
示例#10
0
void CJabberIqManager::ExpireIq(int nIqId)
{
	while (CJabberIqInfo *pInfo = DetouchInfo(nIqId))
		ExpireInfo(pInfo);
}