Hi,
I'm using Ice 3.4.1 on Windows xp c++.
I have a quention about icestorm that how can I subscribe different topics at the same time?
the code as follow:
int SubscriberFun(const string topicName, const Ice::CommunicatorPtr communicator)
{
enum Option { None, Datagram, Twoway, Oneway, Ordered};
Option option = None;
string id;
option = Oneway;
IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(
communicator->propertyToProxy("TopicManager.Proxy"));
if(!manager)
{
//cerr << appName() << ": invalid proxy" << endl;
printf("invalid proxy !\n");
return EXIT_FAILURE;
}
IceStorm::TopicPrx topic;
try
{
topic = manager->retrieve(topicName);
}
catch(const IceStorm::NoSuchTopic&)
{
try
{
topic = manager->create(topicName);
}
catch(const IceStorm::TopicExists&)
{
printf("temporary failure. try again.\n");
return EXIT_FAILURE;
}
}
Ice::ObjectAdapterPtr adapter;
adapter = communicator->createObjectAdapter("Transporter.Subscriber");
Ice::Identity subId;
subId.name = id;
if(subId.name.empty())
{
subId.name = IceUtil::generateUUID();
}
Ice::ObjectPrx subscriber = adapter->add(new TransporterI, subId);
Ice::ObjectPrx subscriber;
subscriber = subscriber->ice_oneway();
IceStorm::QoS qos;
qos["reliability"] = "";
try
{
topic->subscribeAndGetPublisher(qos, subscriber);
}
catch(const IceStorm::AlreadySubscribed&)
{
//cout << "reactivating persistent subscriber" << endl;
printf("reactivating persistent subscriber\n");
}
adapter->activate();
cout<<"订阅主题为"<<topicName<<endl;
shutdownOnInterrupt();
communicator->waitForShutdown();
//topic->unsubscribe(subscriber);
cout<<"等待结束"<<endl;
return EXIT_SUCCESS;
}
int main(int argc, char** argv)
{
communicator=initializeSub( argc, argv );//初始化
SubscriberFun("Weather",communicator);
SubscriberFun("wonderful",communicator);//订阅
Sleep(30000);
}
what should I add in the SubscriberFun?

Reply With Quote
