void find_data::done() { m_done = true; #ifndef TORRENT_DISABLE_LOGGING auto logger = get_node().observer(); if (logger != nullptr) { logger->log(dht_logger::traversal, "[%u] %s DONE" , id(), name()); } #endif std::vector<std::pair<node_entry, std::string>> results; int num_results = m_node.m_table.bucket_size(); for (std::vector<observer_ptr>::iterator i = m_results.begin() , end(m_results.end()); i != end && num_results > 0; ++i) { observer_ptr const& o = *i; if ((o->flags & observer::flag_alive) == 0) { #ifndef TORRENT_DISABLE_LOGGING if (logger != nullptr && logger->should_log(dht_logger::traversal)) { logger->log(dht_logger::traversal, "[%u] not alive: %s" , id(), print_endpoint(o->target_ep()).c_str()); } #endif continue; } auto j = m_write_tokens.find(o->id()); if (j == m_write_tokens.end()) { #ifndef TORRENT_DISABLE_LOGGING if (logger != nullptr && logger->should_log(dht_logger::traversal)) { logger->log(dht_logger::traversal, "[%u] no write token: %s" , id(), print_endpoint(o->target_ep()).c_str()); } #endif continue; } results.push_back(std::make_pair(node_entry(o->id(), o->target_ep()), j->second)); #ifndef TORRENT_DISABLE_LOGGING if (logger != nullptr && logger->should_log(dht_logger::traversal)) { logger->log(dht_logger::traversal, "[%u] %s" , id(), print_endpoint(o->target_ep()).c_str()); } #endif --num_results; } if (m_nodes_callback) m_nodes_callback(results); traversal_algorithm::done(); }
void closest_nodes::done() { std::vector<node_entry> results; int num_results = m_node.m_table.bucket_size(); for (std::vector<result>::iterator i = m_results.begin() , end(m_results.end()); i != end && num_results > 0; ++i) { if (i->flags & result::no_id) continue; if ((i->flags & result::queried) == 0) continue; results.push_back(node_entry(i->id, i->addr)); --num_results; } m_done_callback(results); }
void GameObjectManager::add_object(GameObjectPtr const& object) { assert((object != 0) && object->get_manager() == 0); assert(_objects_by_name.find(object->get_name()) == _objects_by_name.end()); std::pair< std::string, GameObjectPtr > name_entry(object->get_name(), object); _objects_by_name.insert(name_entry); std::pair< GameObject*, ObjectNode > node_entry(object.p(), ObjectNode()); _object_nodes.insert(node_entry); _objects_to_reset.push_back(object.p()); _objects_need_sorting = true; object->_manager = this; }