diff options
author | Matthew Newhook <matthew@zeroc.com> | 2008-02-29 15:51:11 +0800 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2008-02-29 16:39:54 +0800 |
commit | fb4132881dde7c9b135d713a06a3b64db1f706db (patch) | |
tree | 8a037e9d4cae7ed15360ab0878d14b32ac3150a4 /cpp/test/IceStorm/rep1/Sub.cpp | |
parent | fixing mode on php/config/Make.rules.mak (diff) | |
download | ice-fb4132881dde7c9b135d713a06a3b64db1f706db.tar.bz2 ice-fb4132881dde7c9b135d713a06a3b64db1f706db.tar.xz ice-fb4132881dde7c9b135d713a06a3b64db1f706db.zip |
Merge HA IceStorm branch.
- http://bugzilla/bugzilla/show_bug.cgi?id=2706
- http://bugzilla/bugzilla/show_bug.cgi?id=2705
Diffstat (limited to 'cpp/test/IceStorm/rep1/Sub.cpp')
-rw-r--r-- | cpp/test/IceStorm/rep1/Sub.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/cpp/test/IceStorm/rep1/Sub.cpp b/cpp/test/IceStorm/rep1/Sub.cpp new file mode 100644 index 00000000000..e668b0fa50e --- /dev/null +++ b/cpp/test/IceStorm/rep1/Sub.cpp @@ -0,0 +1,124 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <IceUtil/DisableWarnings.h> +#include <IceUtil/IceUtil.h> +#include <IceUtil/Options.h> +#include <Ice/Ice.h> +#include <IceStorm/IceStorm.h> +#include <Single.h> +#include <TestCommon.h> + +using namespace std; +using namespace Ice; +using namespace IceStorm; +using namespace Test; + +class SingleI : public Single +{ +public: + + SingleI() {} + virtual void event(int, const Current&) {} +}; + +int +run(int argc, char* argv[], const CommunicatorPtr& communicator) +{ + IceUtilInternal::Options opts; + opts.addOpt("", "id", IceUtilInternal::Options::NeedArg); + opts.addOpt("", "unsub"); + + try + { + opts.parse(argc, (const char**)argv); + } + catch(const IceUtilInternal::BadOptException& e) + { + cerr << argv[0] << ": " << e.reason << endl; + return EXIT_FAILURE; + } + + PropertiesPtr properties = communicator->getProperties(); + const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default"; + string managerProxy = properties->getProperty(managerProxyProperty); + if(managerProxy.empty()) + { + cerr << argv[0] << ": property `" << managerProxyProperty << "' is not set" << endl; + return EXIT_FAILURE; + } + + ObjectPrx base = communicator->stringToProxy(managerProxy); + IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(base); + if(!manager) + { + cerr << argv[0] << ": `" << managerProxy << "' is not running" << endl; + return EXIT_FAILURE; + } + + ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("SingleAdapter", "default"); + + TopicPrx topic; + try + { + topic = manager->retrieve("single"); + } + catch(const IceStorm::NoSuchTopic& e) + { + cerr << argv[0] << ": NoSuchTopic: " << e.name << endl; + return EXIT_FAILURE; + } + + Ice::ObjectPrx prx = adapter->add(new SingleI(), communicator->stringToIdentity(opts.optArg("id"))); + if(opts.isSet("unsub")) + { + topic->unsubscribe(prx); + } + else + { + IceStorm::QoS qos; + qos["persistent"] = "true"; + topic->subscribeAndGetPublisher(qos, prx); + } + + return EXIT_SUCCESS; +} + +int +main(int argc, char* argv[]) +{ + int status; + CommunicatorPtr communicator; + + try + { + communicator = initialize(argc, argv); + status = run(argc, argv, communicator); + } + catch(const Exception& ex) + { + cerr << ex << endl; + status = EXIT_FAILURE; + } + + if(communicator) + { + try + { + communicator->destroy(); + } + catch(const Exception& ex) + { + cerr << ex << endl; + status = EXIT_FAILURE; + } + } + + return status; +} |