+ min_activity = min(min_activity, i->second->get_activity());
+ }
+ float del_limit = pow(10, 6-0.1*static_cast<int>(max_hosts-hosts.size()-disabled_hosts.size()));
+ for(map<Address, Host *>::iterator i=disabled_hosts.begin(); i!=disabled_hosts.end();)
+ {
+ i->second->tick(dt);
+
+ if(i->second->get_activity()>min_activity)
+ {
+ i->second->set_active(true);
+ hosts.insert(*i);
+ for(unsigned j=0; j<100; ++j)
+ i->second->tick(100*Time::msec);
+ disabled_hosts.erase(i++);
+ }
+ else if(i->second->get_activity()<del_limit)
+ {
+ resolver->cancel(i->second);
+ delete i->second;
+ disabled_hosts.erase(i++);
+ }
+ else
+ ++i;
+ }
+
+ if(hosts.size()>max_visible_hosts)
+ {
+ list<float> activity;
+ for(map<Address, Host *>::iterator i=hosts.begin(); i!=hosts.end(); ++i)
+ activity.push_back(i->second->get_activity());
+ activity.sort();
+
+ list<float>::iterator j = activity.begin();
+ advance(j, activity.size()-max_visible_hosts);
+ float limit = *j;
+
+ for(map<Address, Host *>::iterator i=hosts.begin(); i!=hosts.end();)
+ {
+ if(i->second->get_activity()<limit)
+ {
+ i->second->set_active(false);
+ disabled_hosts.insert(*i);
+ hosts.erase(i++);
+ }
+ else
+ ++i;
+ }
+ }
+
+ for(map<unsigned, Port *>::iterator i=ports.begin(); i!=ports.end();)
+ {
+ i->second->tick(dt);
+
+ if(!i->second->is_registered() && i->second->get_activity()<0.1)
+ {
+ delete i->second;
+ ports.erase(i++);
+ }
+ else
+ ++i;