LinkInfoSeq TransientTopicImpl::getLinkInfoSeq(const Ice::Current&) const { Lock sync(*this); LinkInfoSeq seq; for(vector<SubscriberPtr>::const_iterator p = _subscribers.begin(); p != _subscribers.end(); ++p) { SubscriberRecord record = (*p)->record(); if(record.link && !(*p)->errored()) { LinkInfo info; info.name = IceStormInternal::identityToTopicName(record.theTopic->ice_getIdentity()); info.cost = record.cost; info.theTopic = record.theTopic; seq.push_back(info); } } return seq; }
LinkInfoSeq TopicImpl::getLinkInfoSeq() const { IceUtil::Mutex::Lock sync(_subscribersMutex); LinkInfoSeq seq; for(vector<SubscriberPtr>::const_iterator p = _subscribers.begin(); p != _subscribers.end(); ++p) { SubscriberRecord record = (*p)->record(); if(record.link && !(*p)->errored()) { LinkInfo info; info.name = identityToTopicName(record.theTopic->ice_getIdentity()); info.cost = record.cost; info.theTopic = record.theTopic; seq.push_back(info); } } return seq; }
void Parser::links(const list<string>& args) { if(args.size() > 1) { error("`links' requires at most one argument (type `help' for more info)"); return; } try { TopicManagerPrx manager; if(args.size() == 0) { manager = _defaultManager; } else { manager = findManagerByCategory(args.front()); } TopicDict d = manager->retrieveAll(); for(TopicDict::iterator i = d.begin(); i != d.end(); ++i) { LinkInfoSeq links = i->second->getLinkInfoSeq(); for(LinkInfoSeq::const_iterator p = links.begin(); p != links.end(); ++p) { cout << i->first << " to " << (*p).name << " with cost " << (*p).cost << endl; } } } catch(const Exception& ex) { exception(ex); } }