⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchmanager.cpp

📁 电驴的MAC源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				break;			}			case CSearch::NOTES: {				if (current_it->second->m_created + SEARCHNOTES_LIFETIME < now) {					delete current_it->second;					m_searches.erase(current_it);				} else if (current_it->second->GetAnswers() > SEARCHNOTES_TOTAL ||					   current_it->second->m_created + SEARCHNOTES_LIFETIME - SEC(20) < now) {					current_it->second->PrepareToStop();				} else {					current_it->second->JumpStart();				}				break;			}			case CSearch::FINDBUDDY: {				if (current_it->second->m_created + SEARCHFINDBUDDY_LIFETIME < now) {					delete current_it->second;					m_searches.erase(current_it);				} else if (current_it->second->GetAnswers() > SEARCHFINDBUDDY_TOTAL ||					   current_it->second->m_created + SEARCHFINDBUDDY_LIFETIME - SEC(20) < now) {					current_it->second->PrepareToStop();				} else {					current_it->second->JumpStart();				}				break;			}			case CSearch::FINDSOURCE: {				if (current_it->second->m_created + SEARCHFINDSOURCE_LIFETIME < now) {					delete current_it->second;					m_searches.erase(current_it);				} else if (current_it->second->GetAnswers() > SEARCHFINDSOURCE_TOTAL ||					   current_it->second->m_created + SEARCHFINDSOURCE_LIFETIME - SEC(20) < now) {					current_it->second->PrepareToStop();				} else {					current_it->second->JumpStart();				}				break;			}			case CSearch::NODE:			case CSearch::NODESPECIAL:			case CSearch::NODEFWCHECKUDP: {				if (current_it->second->m_created + SEARCHNODE_LIFETIME < now) {					delete current_it->second;					m_searches.erase(current_it);				} else {					current_it->second->JumpStart();				}				break;			}			case CSearch::NODECOMPLETE: {				if (current_it->second->m_created + SEARCHNODE_LIFETIME < now) {					// Tell Kad it can start publishing.					CKademlia::GetPrefs()->SetPublish(true);					delete current_it->second;					m_searches.erase(current_it);				} else if ((current_it->second->m_created + SEARCHNODECOMP_LIFETIME < now) &&					   (current_it->second->GetAnswers() > SEARCHNODECOMP_TOTAL)) {					// Tell Kad it can start publishing.					CKademlia::GetPrefs()->SetPublish(true);					delete current_it->second;					m_searches.erase(current_it);				} else {					current_it->second->JumpStart();				}				break;			}			case CSearch::STOREFILE: {				if (current_it->second->m_created + SEARCHSTOREFILE_LIFETIME < now) {					delete current_it->second;					m_searches.erase(current_it);				} else if (current_it->second->GetAnswers() > SEARCHSTOREFILE_TOTAL ||					   current_it->second->m_created + SEARCHSTOREFILE_LIFETIME - SEC(20) < now) {					current_it->second->PrepareToStop();				} else {					current_it->second->JumpStart();				}				break;			}			case CSearch::STOREKEYWORD: {				if (current_it->second->m_created + SEARCHSTOREKEYWORD_LIFETIME < now) {					delete current_it->second;					m_searches.erase(current_it);				} else if (current_it->second->GetAnswers() > SEARCHSTOREKEYWORD_TOTAL ||					   current_it->second->m_created + SEARCHSTOREKEYWORD_LIFETIME - SEC(20)< now) {					current_it->second->PrepareToStop();				} else {					current_it->second->JumpStart();				}				break;			}			case CSearch::STORENOTES: {				if (current_it->second->m_created + SEARCHSTORENOTES_LIFETIME < now) {					delete current_it->second;					m_searches.erase(current_it);				} else if (current_it->second->GetAnswers() > SEARCHSTORENOTES_TOTAL ||					   current_it->second->m_created + SEARCHSTORENOTES_LIFETIME - SEC(20)< now) {					current_it->second->PrepareToStop();				} else {					current_it->second->JumpStart();				}				break;			}			default: {				if (current_it->second->m_created + SEARCH_LIFETIME < now) {					delete current_it->second;					m_searches.erase(current_it);				} else {					current_it->second->JumpStart();				}				break;			}		}	}}void CSearchManager::UpdateStats() throw(){	uint8_t m_totalFile = 0;	uint8_t m_totalStoreSrc = 0;	uint8_t m_totalStoreKey = 0;	uint8_t m_totalSource = 0;	uint8_t m_totalNotes = 0;	uint8_t m_totalStoreNotes = 0;			for (SearchMap::iterator it = m_searches.begin(); it != m_searches.end(); ++it) {		switch(it->second->GetSearchTypes()){			case CSearch::FILE: {				m_totalFile++;				break;			}			case CSearch::STOREFILE: {				m_totalStoreSrc++;				break;			}			case CSearch::STOREKEYWORD:	{				m_totalStoreKey++;				break;			}			case CSearch::FINDSOURCE: {				m_totalSource++;				break;			}			case CSearch::STORENOTES: {				m_totalStoreNotes++;				break;			}			case CSearch::NOTES: {				m_totalNotes++;				break;			}			default:				break;		}	}	CPrefs *prefs = CKademlia::GetPrefs();	prefs->SetTotalFile(m_totalFile);	prefs->SetTotalStoreSrc(m_totalStoreSrc);	prefs->SetTotalStoreKey(m_totalStoreKey);	prefs->SetTotalSource(m_totalSource);	prefs->SetTotalNotes(m_totalNotes);	prefs->SetTotalStoreNotes(m_totalStoreNotes);}void CSearchManager::ProcessPublishResult(const CUInt128& target, const uint8_t load, const bool loadResponse){	// We tried to publish some info and got a result.	CSearch *s = NULL;	SearchMap::const_iterator it = m_searches.find(target);	if (it != m_searches.end()) {		s = it->second;	}	// Result could be very late and store deleted, abort.	if (s == NULL) {		return;	}	switch (s->GetSearchTypes()) {		case CSearch::STOREKEYWORD: {			if (loadResponse) {				s->UpdateNodeLoad(load);			}			break;		}		case CSearch::STOREFILE:		case CSearch::STORENOTES:			break;	}	s->m_answers++;}void CSearchManager::ProcessResponse(const CUInt128& target, uint32_t fromIP, uint16_t fromPort, ContactList *results){	// We got a response to a kad lookup.	CSearch *s = NULL;	SearchMap::const_iterator it = m_searches.find(target);	if (it != m_searches.end()) {		s = it->second;	}	// If this search was deleted before this response, delete contacts and abort, otherwise process them.	if (s == NULL) {		AddDebugLogLineM(false, logKadSearch,			wxT("Search either never existed or receiving late results (CSearchManager::ProcessResponse)"));		for (ContactList::const_iterator it2 = results->begin(); it2 != results->end(); ++it2) {			delete *it2;		}		delete results;		return;	} else {		s->ProcessResponse(fromIP, fromPort, results);	}}void CSearchManager::ProcessResult(const CUInt128& target, const CUInt128& answer, TagPtrList *info){	// We have results for a request for info.	CSearch *s = NULL;	SearchMap::const_iterator it = m_searches.find(target);	if (it != m_searches.end()) {		s = it->second;	}	// If this search was deleted before these results, delete contacts and abort, otherwise process them.	if (s == NULL) {		AddDebugLogLineM (false, logKadSearch,			wxT("Search either never existed or receiving late results (CSearchManager::ProcessResult)"));		for (TagPtrList::const_iterator tagIt = info->begin(); tagIt != info->end(); tagIt++) {			delete *tagIt;		}		delete info;	} else {		s->ProcessResult(answer, info);	}}bool CSearchManager::FindNodeSpecial(const CUInt128& id, CKadClientSearcher *requester){	// Do a node lookup.	AddDebugLogLineM(false, logKadSearch, wxT("Starting NODESPECIAL Kad Search for ") + id.ToHexString());	CSearch *search = new CSearch;	search->SetSearchTypes(CSearch::NODESPECIAL);	search->SetTargetID(id);	search->SetNodeSpecialSearchRequester(requester);	return StartSearch(search);}bool CSearchManager::FindNodeFWCheckUDP(){	CancelNodeFWCheckUDPSearch();	CUInt128 id;	id.SetValueRandom();	AddDebugLogLineM(false, logKadSearch, wxT("Starting NODEFWCHECKUDP Kad Search"));	CSearch *search = new CSearch;	search->SetSearchTypes(CSearch::NODEFWCHECKUDP);	search->SetTargetID(id);	return StartSearch(search);}void CSearchManager::CancelNodeSpecial(CKadClientSearcher* requester){	// Stop a specific nodespecialsearch	for (SearchMap::iterator it = m_searches.begin(); it != m_searches.end(); ++it) {		if (it->second->GetNodeSpecialSearchRequester() == requester) {			it->second->SetNodeSpecialSearchRequester(NULL);			it->second->PrepareToStop();			return;		}	}}void CSearchManager::CancelNodeFWCheckUDPSearch(){	// Stop node searches done for udp firewallcheck	for (SearchMap::iterator it = m_searches.begin(); it != m_searches.end(); ++it) {		if (it->second->GetSearchTypes() == CSearch::NODEFWCHECKUDP) {			it->second->PrepareToStop();		}	}}// File_checked_for_headers

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -