diff options
Diffstat (limited to 'cpp/demo')
40 files changed, 1863 insertions, 345 deletions
diff --git a/cpp/demo/IceStorm/Makefile b/cpp/demo/IceStorm/Makefile index a71c7b2235a..c2713280047 100644 --- a/cpp/demo/IceStorm/Makefile +++ b/cpp/demo/IceStorm/Makefile @@ -11,7 +11,7 @@ top_srcdir = ../.. include $(top_srcdir)/config/Make.rules -SUBDIRS = clock counter replicated +SUBDIRS = clock counter replicated replicated2 $(EVERYTHING):: @for subdir in $(SUBDIRS); \ diff --git a/cpp/demo/IceStorm/Makefile.mak b/cpp/demo/IceStorm/Makefile.mak index 3027da38dab..569a0a60a5c 100644 --- a/cpp/demo/IceStorm/Makefile.mak +++ b/cpp/demo/IceStorm/Makefile.mak @@ -11,7 +11,7 @@ top_srcdir = ..\.. !include $(top_srcdir)\config\Make.rules.mak -SUBDIRS = clock counter replicated +SUBDIRS = clock counter replicated replicated2 $(EVERYTHING):: @for %i in ( $(SUBDIRS) ) do \ diff --git a/cpp/demo/IceStorm/README b/cpp/demo/IceStorm/README index a0caf8cd50d..cb7b44a2837 100644 --- a/cpp/demo/IceStorm/README +++ b/cpp/demo/IceStorm/README @@ -12,3 +12,7 @@ Demos in this directory: - replicated Shows how to replicate IceStorm services using IceGrid. + +- replicated2 + + Shows how to replicate IceStorm services without using IceGrid. diff --git a/cpp/demo/IceStorm/clock/.depend b/cpp/demo/IceStorm/clock/.depend index d3383526e6a..b70ddcd8b28 100644 --- a/cpp/demo/IceStorm/clock/.depend +++ b/cpp/demo/IceStorm/clock/.depend @@ -1,4 +1,4 @@ -Clock$(OBJEXT): Clock.cpp Clock.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h +Clock$(OBJEXT): Clock.cpp Clock.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h Publisher$(OBJEXT): Publisher.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Clock.h Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Clock.h Clock.cpp: Clock.ice diff --git a/cpp/demo/IceStorm/clock/Publisher.cpp b/cpp/demo/IceStorm/clock/Publisher.cpp index 7ac4258f88d..36fbf10b0f6 100644 --- a/cpp/demo/IceStorm/clock/Publisher.cpp +++ b/cpp/demo/IceStorm/clock/Publisher.cpp @@ -33,27 +33,21 @@ main(int argc, char* argv[]) void usage(const string& n) { - cerr << "Usage: " << n << " [--datagram|--twoway|--oneway] [topic]\n" << endl; + cerr << "Usage: " << n << " [--datagram|--twoway|--oneway] [topic]" << endl; } int Publisher::run(int argc, char* argv[]) { - enum Option { Datagram, Twoway, Oneway }; - Option option = Oneway; - + enum Option { None, Datagram, Twoway, Oneway }; + Option option = None; string topicName = "time"; + int i; - if(argc > 3) - { - cerr << appName() << ": too many arguments" << endl; - usage(appName()); - return EXIT_FAILURE; - } - - if(argc >= 2) + for(i = 1; i < argc; ++i) { - string optionString = argv[1]; + string optionString = argv[i]; + Option oldoption = option; if(optionString == "--datagram") { option = Datagram; @@ -66,35 +60,32 @@ Publisher::run(int argc, char* argv[]) { option = Oneway; } - else if(argc == 3) + else if(optionString.substr(0, 2) == "--") { - cerr << appName() << ": too many arguments" << endl; - usage(appName()); + usage(argv[0]); return EXIT_FAILURE; } else { - topicName = optionString; - } - - if(argc == 3) - { - topicName = argv[2]; + topicName = argv[i++]; + break; } - if(topicName[0] == '-') + if(oldoption != option && oldoption != None) { - cerr << appName() << ": invalid topic name" << endl; - usage(appName()); + usage(argv[0]); return EXIT_FAILURE; } } - - + if(i != argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast( - communicator()->propertyToProxy("IceStorm.TopicManager.Proxy")); + communicator()->propertyToProxy("TopicManager.Proxy")); if(!manager) { cerr << appName() << ": invalid proxy" << endl; @@ -135,7 +126,7 @@ Publisher::run(int argc, char* argv[]) { // Do nothing. } - else if(option == Oneway) + else if(option == Oneway || option == None) { publisher = publisher->ice_oneway(); } diff --git a/cpp/demo/IceStorm/clock/README b/cpp/demo/IceStorm/clock/README index 1f5b44e76f1..f2276af203e 100644 --- a/cpp/demo/IceStorm/clock/README +++ b/cpp/demo/IceStorm/clock/README @@ -47,6 +47,19 @@ subscriber --batch This is an additional flag that forwards datagram and oneway events to the subscriber in batches. +subscriber --id <id> + + This is flag sets the unique for the given subscriber. If this + option is used it you should run the subscriber on a static port. + Use --Clock.Subscriber.Endpoints="tcp -p <x> -h <h>:udp -p <x> -h + <h>" + +subscriber --retryCount <count> + + This flag sets the retry count for a subscriber. This option should + be used in conjunction with the --id option. Setting retryCount + changes the default subscriber QoS to twoway. + For the publisher: publisher --oneway diff --git a/cpp/demo/IceStorm/clock/Subscriber.cpp b/cpp/demo/IceStorm/clock/Subscriber.cpp index 04ebe98a927..1d7faf18673 100644 --- a/cpp/demo/IceStorm/clock/Subscriber.cpp +++ b/cpp/demo/IceStorm/clock/Subscriber.cpp @@ -13,8 +13,6 @@ #include <Clock.h> -#include <map> - using namespace std; using namespace Demo; @@ -46,50 +44,30 @@ main(int argc, char* argv[]) void usage(const string& n) { - cerr << "Usage: " << n << " [--batch] [--datagram|--twoway|--ordered|--oneway] [topic]" << endl; + cerr << "Usage: " << n + << " [--batch] [--datagram|--twoway|--ordered|--oneway] [--retryCount count] [--id id] [topic]" << endl; } int Subscriber::run(int argc, char* argv[]) { - bool batch = false; - - enum Option { Datagram, Twoway, Oneway, Ordered}; - Option option = Oneway; + Ice::StringSeq args = Ice::argsToStringSeq(argc, argv); + args = communicator()->getProperties()->parseCommandLineOptions("Clock", args); + Ice::stringSeqToArgs(args, argc, argv); + bool batch = false; + enum Option { None, Datagram, Twoway, Oneway, Ordered}; + Option option = None; string topicName = "time"; + string id; + string retryCount; + int i; - if(argc > 4) - { - cerr << appName() << ": too many arguments" << endl; - usage(appName()); - return EXIT_FAILURE; - } - - if(argc >= 2) + for(i = 1; i < argc; ++i) { - int argIndex = 1; - string optionString = argv[argIndex]; - - if(optionString == "--batch") - { - batch = true; - if(argc >= 3) - { - argIndex++; - optionString = argv[argIndex]; - } - else - { - optionString = ""; - } - } - - if(optionString == "") - { - // done - } - else if(optionString == "--datagram") + string optionString = argv[i]; + Option oldoption = option; + if(optionString == "--datagram") { option = Datagram; } @@ -105,33 +83,75 @@ Subscriber::run(int argc, char* argv[]) { option = Ordered; } - else if(argIndex == argc - 2) + else if(optionString == "--batch") { - cerr << appName() << ": too many arguments" << endl; - usage(appName()); + batch = true; + } + else if(optionString == "--id") + { + ++i; + if(i >= argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + id = argv[i]; + } + else if(optionString == "--retryCount") + { + ++i; + if(i >= argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + retryCount = argv[i]; + } + else if(optionString.substr(0, 2) == "--") + { + usage(argv[0]); return EXIT_FAILURE; } else { - topicName = optionString; + topicName = argv[i++]; + break; } - argIndex++; - if(argIndex < argc) + if(oldoption != option && oldoption != None) { - topicName = argv[argIndex]; + usage(argv[0]); + return EXIT_FAILURE; } + } - if(topicName[0] == '-') + if(i != argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + + if(!retryCount.empty()) + { + if(option == None) { - cerr << appName() << ": invalid topic name" << endl; - usage(appName()); + option = Twoway; + } + else if(option != Twoway && option != Ordered) + { + cerr << argv[0] << ": retryCount requires a twoway proxy" << endl; return EXIT_FAILURE; } } + if(batch && (option == Twoway || option == Ordered)) + { + cerr << argv[0] << ": batch can only be set with oneway or datagram" << endl; + return EXIT_FAILURE; + } + IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast( - communicator()->propertyToProxy("IceStorm.TopicManager.Proxy")); + communicator()->propertyToProxy("TopicManager.Proxy")); if(!manager) { cerr << appName() << ": invalid proxy" << endl; @@ -159,52 +179,74 @@ Subscriber::run(int argc, char* argv[]) Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Clock.Subscriber"); // - // Add a Servant for the Ice Object. + // Add a servant for the Ice object. If --id is used the identity + // comes from the command line, otherwise a UUID is used. // + // id is not directly altered since it is used below to detect + // whether subscribeAndGetPublisher can raise AlreadySubscribed. + // + Ice::Identity subId; + subId.name = id; + if(subId.name.empty()) + { + subId.name = IceUtil::generateUUID(); + } + Ice::ObjectPrx subscriber = adapter->add(new ClockI, subId); + IceStorm::QoS qos; - Ice::ObjectPrx subscriber = adapter->addWithUUID(new ClockI); + if(!retryCount.empty()) + { + qos["retryCount"] = retryCount; + } + // // Set up the proxy. // - if(option == Datagram) { - subscriber = subscriber->ice_datagram(); + if(batch) + { + subscriber = subscriber->ice_batchDatagram(); + } + else + { + subscriber = subscriber->ice_datagram(); + } } else if(option == Twoway) { // Do nothing to the subscriber proxy. Its already twoway. - } else if(option == Ordered) { - qos["reliability"] = "ordered"; // Do nothing to the subscriber proxy. Its already twoway. - - } - else if(option == Oneway) - { - subscriber = subscriber->ice_oneway(); + qos["reliability"] = "ordered"; } - - if(batch) + else if(option == Oneway || option == None) { - if(option == Twoway || option == Ordered) + if(batch) { - cerr << appName() << ": batch can only be set with oneway or datagram" << endl; - return EXIT_FAILURE; - } - if(option == Datagram) - { - subscriber = subscriber->ice_batchDatagram(); + subscriber = subscriber->ice_batchOneway(); } else { - subscriber = subscriber->ice_batchOneway(); + subscriber = subscriber->ice_oneway(); } } - topic->subscribeAndGetPublisher(qos, subscriber); + try + { + topic->subscribeAndGetPublisher(qos, subscriber); + } + catch(const IceStorm::AlreadySubscribed&) + { + // If we're manually setting the subscriber id ignore. + if(id.empty()) + { + throw; + } + cout << "reactivating persistent subscriber" << endl; + } adapter->activate(); shutdownOnInterrupt(); diff --git a/cpp/demo/IceStorm/clock/config.pub b/cpp/demo/IceStorm/clock/config.pub index c6de9cb84b1..e7d497f8f52 100644 --- a/cpp/demo/IceStorm/clock/config.pub +++ b/cpp/demo/IceStorm/clock/config.pub @@ -1,7 +1,7 @@ # # This property is used by the clients to connect to IceStorm. # -IceStorm.TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 +TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 # # Network Tracing diff --git a/cpp/demo/IceStorm/clock/config.service b/cpp/demo/IceStorm/clock/config.service index b9930aa64d4..e87c8a3b23e 100644 --- a/cpp/demo/IceStorm/clock/config.service +++ b/cpp/demo/IceStorm/clock/config.service @@ -1,14 +1,12 @@ # -# This property is used by the administrative client to connect to IceStorm. -# -IceStorm.TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 - -# # This property defines the endpoints on which the IceStorm # TopicManager listens. # IceStorm.TopicManager.Endpoints=default -p 10000 +IceStorm.Publish.ThreadPool.Size=2 +IceStorm.Publish.ThreadPool.SizeWarn=0 + # # The IceStorm service instance name. # diff --git a/cpp/demo/IceStorm/clock/config.sub b/cpp/demo/IceStorm/clock/config.sub index ad2ac555de8..cefadaeb6e5 100644 --- a/cpp/demo/IceStorm/clock/config.sub +++ b/cpp/demo/IceStorm/clock/config.sub @@ -7,7 +7,7 @@ Clock.Subscriber.Endpoints=tcp:udp # # This property is used by the clients to connect to IceStorm. # -IceStorm.TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 +TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 # # Network Tracing diff --git a/cpp/demo/IceStorm/counter/.depend b/cpp/demo/IceStorm/counter/.depend index 46a869c6112..b9262487438 100644 --- a/cpp/demo/IceStorm/counter/.depend +++ b/cpp/demo/IceStorm/counter/.depend @@ -1,7 +1,7 @@ -Counter$(OBJEXT): Counter.cpp Counter.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h -Client$(OBJEXT): Client.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h CounterObserverI.h Counter.h -CounterObserverI$(OBJEXT): CounterObserverI.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h CounterObserverI.h Counter.h -Server$(OBJEXT): Server.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h CounterI.h Counter.h -CounterI$(OBJEXT): CounterI.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h CounterI.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Counter.h +Counter$(OBJEXT): Counter.cpp Counter.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h +Client$(OBJEXT): Client.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h CounterObserverI.h Counter.h +CounterObserverI$(OBJEXT): CounterObserverI.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h CounterObserverI.h Counter.h +Server$(OBJEXT): Server.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h CounterI.h Counter.h +CounterI$(OBJEXT): CounterI.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h CounterI.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Counter.h Counter.cpp: Counter.ice Counter.ice: $(SLICE2CPP) $(SLICEPARSERLIB) diff --git a/cpp/demo/IceStorm/counter/Server.cpp b/cpp/demo/IceStorm/counter/Server.cpp index cdf5996e313..b58d55e2ba4 100644 --- a/cpp/demo/IceStorm/counter/Server.cpp +++ b/cpp/demo/IceStorm/counter/Server.cpp @@ -42,15 +42,8 @@ Server::run(int argc, char* argv[]) Ice::PropertiesPtr properties = communicator()->getProperties(); - const string proxyProperty = "IceStorm.TopicManager.Proxy"; - string proxy = properties->getProperty(proxyProperty); - if(proxy.empty()) - { - cerr << appName() << ": property `" << proxyProperty << "' not set" << endl; - return EXIT_FAILURE; - } - - IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(communicator()->stringToProxy(proxy)); + IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast( + communicator()->propertyToProxy("TopicManager.Proxy")); if(!manager) { cerr << appName() << ": invalid proxy" << endl; diff --git a/cpp/demo/IceStorm/counter/config.server b/cpp/demo/IceStorm/counter/config.server index be119f2b1da..52b117f3d2f 100644 --- a/cpp/demo/IceStorm/counter/config.server +++ b/cpp/demo/IceStorm/counter/config.server @@ -6,7 +6,7 @@ Counter.Endpoints=tcp -p 12000 # # This property is used by the counter server to connect with IceStorm. # -IceStorm.TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 +TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 # # Network Tracing diff --git a/cpp/demo/IceStorm/counter/config.service b/cpp/demo/IceStorm/counter/config.service index f6deda26be5..d27cb93ce31 100644 --- a/cpp/demo/IceStorm/counter/config.service +++ b/cpp/demo/IceStorm/counter/config.service @@ -1,9 +1,4 @@ # -# This property is used by the administrative client to connect to IceStorm. -# -IceStorm.TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 - -# # This property defines the endpoints on which the IceStorm # TopicManager listens. # diff --git a/cpp/demo/IceStorm/replicated/.depend b/cpp/demo/IceStorm/replicated/.depend index 3d3bef5952a..b70ddcd8b28 100644 --- a/cpp/demo/IceStorm/replicated/.depend +++ b/cpp/demo/IceStorm/replicated/.depend @@ -1,5 +1,5 @@ -Clock$(OBJEXT): Clock.cpp Clock.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h -Publisher$(OBJEXT): Publisher.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h $(includedir)/IceGrid/Query.h $(includedir)/IceGrid/Exception.h Clock.h -Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h $(includedir)/IceGrid/Query.h $(includedir)/IceGrid/Exception.h Clock.h +Clock$(OBJEXT): Clock.cpp Clock.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h +Publisher$(OBJEXT): Publisher.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Clock.h +Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Clock.h Clock.cpp: Clock.ice Clock.ice: $(SLICE2CPP) $(SLICEPARSERLIB) diff --git a/cpp/demo/IceStorm/replicated/Publisher.cpp b/cpp/demo/IceStorm/replicated/Publisher.cpp index 44e0f3fd1ec..6fb1acf9474 100644 --- a/cpp/demo/IceStorm/replicated/Publisher.cpp +++ b/cpp/demo/IceStorm/replicated/Publisher.cpp @@ -10,7 +10,6 @@ #include <IceUtil/IceUtil.h> #include <Ice/Ice.h> #include <IceStorm/IceStorm.h> -#include <IceGrid/Query.h> #include <Clock.h> @@ -31,31 +30,79 @@ main(int argc, char* argv[]) return app.main(argc, argv, "config.pub"); } +void +usage(const string& n) +{ + cerr << "Usage: " << n << " [--datagram|--twoway|--oneway] [topic]" << endl; +} + int Publisher::run(int argc, char* argv[]) { - if(argc > 2) + enum Option { None, Datagram, Twoway, Oneway }; + Option option = None; + string topicName = "time"; + int i; + + for(i = 1; i < argc; ++i) { - cerr << appName() << ": too many arguments" << endl; - return EXIT_FAILURE; - } + string optionString = argv[i]; + Option oldoption = option; + if(optionString == "--datagram") + { + option = Datagram; + } + else if(optionString == "--twoway") + { + option = Twoway; + } + else if(optionString == "--oneway") + { + option = Oneway; + } + else if(optionString.substr(0, 2) == "--") + { + usage(argv[0]); + return EXIT_FAILURE; + } + else + { + topicName = argv[i++]; + break; + } - Ice::PropertiesPtr properties = communicator()->getProperties(); + if(oldoption != option && oldoption != None) + { + usage(argv[0]); + return EXIT_FAILURE; + } + } - IceStorm::TopicManagerPrx manager = - IceStorm::TopicManagerPrx::checkedCast(communicator()->stringToProxy("DemoIceStorm/TopicManager")); - if(manager == 0) + if(i != argc) { - cerr << appName() << ": no topic manager found, make sure application was deployed." << endl; + usage(argv[0]); return EXIT_FAILURE; } - string topicName = "time"; - if(argc != 1) + IceStorm::TopicManagerPrx manager; + try { - topicName = argv[1]; + manager = IceStorm::TopicManagerPrx::checkedCast(communicator()->stringToProxy("DemoIceStorm/TopicManager")); + if(!manager) + { + cerr << appName() << ": invalid proxy" << endl; + return EXIT_FAILURE; + } + } + catch(const Ice::NotRegisteredException&) + { + cerr << appName() << ": no topic manager found, make sure application was deployed." << endl; + return EXIT_FAILURE; } + // + // Retrieve the topic. + // IceStorm::TopicPrx topic; try { @@ -63,16 +110,38 @@ Publisher::run(int argc, char* argv[]) } catch(const IceStorm::NoSuchTopic&) { - cerr << appName() << ": topics not created yet, run subscriber." << endl; - return EXIT_FAILURE; + try + { + topic = manager->create(topicName); + } + catch(const IceStorm::TopicExists&) + { + cerr << appName() << ": temporary failure. try again." << endl; + return EXIT_FAILURE; + } } // - // Get the topic's publisher object, and configure a Clock proxy - // with per-request load balancing. + // Get the topic's publisher object, and create a Clock proxy with + // the mode specified as an argument of this application. // - ClockPrx clock = ClockPrx::uncheckedCast(topic->getPublisher()->ice_oneway()->ice_connectionCached(false)); + Ice::ObjectPrx publisher = topic->getPublisher(); + if(option == Datagram) + { + publisher = publisher->ice_datagram(); + } + else if(option == Twoway) + { + // Do nothing. + } + else if(option == Oneway || option == None) + { + publisher = publisher->ice_oneway(); + } + + ClockPrx clock = ClockPrx::uncheckedCast(publisher); + cout << "publishing tick events. Press ^C to terminate the application." << endl; try { while(true) diff --git a/cpp/demo/IceStorm/replicated/Subscriber.cpp b/cpp/demo/IceStorm/replicated/Subscriber.cpp index 7a0848c76a4..9754af70bcd 100644 --- a/cpp/demo/IceStorm/replicated/Subscriber.cpp +++ b/cpp/demo/IceStorm/replicated/Subscriber.cpp @@ -10,128 +10,12 @@ #include <IceUtil/IceUtil.h> #include <Ice/Ice.h> #include <IceStorm/IceStorm.h> -#include <IceGrid/Query.h> #include <Clock.h> -#include <set> - using namespace std; using namespace Demo; -class InstanceCheckThread : public IceUtil::Thread, public IceUtil::Monitor<IceUtil::Mutex> -{ -public: - - InstanceCheckThread(const IceGrid::QueryPrx& query, const string& topicName, const Ice::ObjectPrx& clock, - const Ice::ObjectPrx& managerReplica, const set<IceStorm::TopicManagerPrx>& managers, - const Ice::ObjectPrx& topicReplica, const set<IceStorm::TopicPrx>& topics) : - _query(query), - _topicName(topicName), - _clock(clock), - _managerReplica(managerReplica), - _managers(managers), - _topicReplica(topicReplica), - _topics(topics), - _timeout(IceUtil::Time::seconds(10)), - _terminated(false) - { - } - - virtual void - run() - { - Lock sync(*this); - while(!_terminated) - { - timedWait(_timeout); - if(!_terminated) - { - try - { - // - // Check if there are any new topic managers in the replicas list. - // - Ice::ObjectProxySeq managers = _query->findAllReplicas(_managerReplica); - Ice::ObjectProxySeq::const_iterator p; - for(p = managers.begin(); p != managers.end(); ++p) - { - IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::uncheckedCast(*p); - if(_managers.find(manager) == _managers.end()) - { - // - // Create the topic on the new topic manager if it does - // not already exist. - // - try - { - manager->retrieve(_topicName); - } - catch(const IceStorm::NoSuchTopic&) - { - manager->create(_topicName); - } - - // - // Since the topic proxy returned by the retrieval/creation - // is a replicated proxy we cannot use it to subscribe to the - // new instance. Instead we have to retrive all the topics and - // find the new one. - // - Ice::ObjectProxySeq topics = _query->findAllReplicas(_topicReplica); - Ice::ObjectProxySeq::const_iterator q; - for(q = topics.begin(); q != topics.end(); ++q) - { - IceStorm::TopicPrx topic = IceStorm::TopicPrx::uncheckedCast(*q);; - if(_topics.find(topic) == _topics.end()) - { - try - { - topic->subscribeAndGetPublisher(IceStorm::QoS(), _clock); - } - catch(const IceStorm::AlreadySubscribed&) - { - // Ignore - } - _topics.insert(topic); - _managers.insert(manager); - break; - } - } - } - } - } - catch(const Ice::Exception& ex) - { - cerr << "warning: exception while checking for new IceStorm instances: " << ex << endl; - } - } - } - } - - void - terminate() - { - Lock sync(*this); - _terminated = true; - notify(); - } - -private: - - const IceGrid::QueryPrx _query; - const string _topicName; - const Ice::ObjectPrx _clock; - const Ice::ObjectPrx _managerReplica; - set<IceStorm::TopicManagerPrx> _managers; - const Ice::ObjectPrx _topicReplica; - set<IceStorm::TopicPrx> _topics; - const IceUtil::Time _timeout; - bool _terminated; -}; - -typedef IceUtil::Handle<InstanceCheckThread> InstanceCheckThreadPtr; - class ClockI : public Clock { public: @@ -157,109 +41,226 @@ main(int argc, char* argv[]) return app.main(argc, argv, "config.sub"); } +void +usage(const string& n) +{ + cerr << "Usage: " << n + << " [--batch] [--datagram|--twoway|--ordered|--oneway] [--retryCount count] [--id id] [topic]" << endl; +} + int Subscriber::run(int argc, char* argv[]) { - if(argc > 2) + Ice::StringSeq args = Ice::argsToStringSeq(argc, argv); + args = communicator()->getProperties()->parseCommandLineOptions("Clock", args); + Ice::stringSeqToArgs(args, argc, argv); + + bool batch = false; + enum Option { None, Datagram, Twoway, Oneway, Ordered}; + Option option = None; + string topicName = "time"; + string id; + string retryCount; + int i; + + for(i = 1; i < argc; ++i) { - cerr << appName() << ": too many arguments" << endl; - return EXIT_FAILURE; - } + string optionString = argv[i]; + Option oldoption = option; + if(optionString == "--datagram") + { + option = Datagram; + } + else if(optionString == "--twoway") + { + option = Twoway; + } + else if(optionString == "--oneway") + { + option = Oneway; + } + else if(optionString == "--ordered") + { + option = Ordered; + } + else if(optionString == "--batch") + { + batch = true; + } + else if(optionString == "--id") + { + ++i; + if(i >= argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + id = argv[i]; + } + else if(optionString == "--retryCount") + { + ++i; + if(i >= argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + retryCount = argv[i]; + } + else if(optionString.substr(0, 2) == "--") + { + usage(argv[0]); + return EXIT_FAILURE; + } + else + { + topicName = argv[i++]; + break; + } - Ice::PropertiesPtr properties = communicator()->getProperties(); + if(oldoption != option && oldoption != None) + { + usage(argv[0]); + return EXIT_FAILURE; + } + } - IceGrid::QueryPrx query = IceGrid::QueryPrx::uncheckedCast(communicator()->stringToProxy("DemoIceGrid/Query")); - Ice::ObjectPrx managerReplica = communicator()->stringToProxy("DemoIceStorm/TopicManager"); - Ice::ObjectProxySeq objSeq = query->findAllReplicas(managerReplica); - if(objSeq.size() == 0) + if(i != argc) { - cerr << appName() << ": no topic managers found, make sure application was deployed." << endl; + usage(argv[0]); return EXIT_FAILURE; } - string topicName = "time"; - if(argc != 1) + if(!retryCount.empty()) { - topicName = argv[1]; + if(option == None) + { + option = Twoway; + } + else if(option != Twoway && option != Ordered) + { + cerr << argv[0] << ": retryCount requires a twoway proxy" << endl; + return EXIT_FAILURE; + } } - // - // Create the servant to receive the events. - // - Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Clock.Subscriber"); - - // - // We want to use oneway batch messages. - // - Ice::ObjectPrx clock = adapter->addWithUUID(new ClockI)->ice_batchOneway(); + if(batch && (option == Twoway || option == Ordered)) + { + cerr << argv[0] << ": batch can only be set with oneway or datagram" << endl; + return EXIT_FAILURE; + } - // - // Get all the topic managers and create the topic if necessary. - // - IceStorm::TopicPrx topicReplica; - set<IceStorm::TopicManagerPrx> managers; - Ice::ObjectProxySeq::const_iterator p; - for(p = objSeq.begin(); p != objSeq.end(); ++p) + IceStorm::TopicManagerPrx manager; + try + { + manager = IceStorm::TopicManagerPrx::checkedCast(communicator()->stringToProxy("DemoIceStorm/TopicManager")); + if(!manager) + { + cerr << appName() << ": invalid proxy" << endl; + return EXIT_FAILURE; + } + } + catch(const Ice::NotRegisteredException&) { - IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(*p); - managers.insert(manager); + cerr << appName() << ": no topic manager found, make sure application was deployed." << endl; + return EXIT_FAILURE; + } + IceStorm::TopicPrx topic; + try + { + topic = manager->retrieve(topicName); + } + catch(const IceStorm::NoSuchTopic&) + { try { - topicReplica = manager->retrieve(topicName); + topic = manager->create(topicName); } - catch(const IceStorm::NoSuchTopic&) + catch(const IceStorm::TopicExists&) { - try - { - topicReplica = manager->create(topicName); - } - catch(const IceStorm::TopicExists&) - { - cerr << appName() << ": temporary failure. try again." << endl; - return EXIT_FAILURE; - } + cerr << appName() << ": temporary failure. try again." << endl; + return EXIT_FAILURE; } } + Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Clock.Subscriber"); + // - // Get all the topics and subscribe. We can't use the proxies returned by - // the topic creation above because they are repicated proxies, and not - // specific proxies for each individual topic. + // Add a servant for the Ice object. If --id is used the identity + // comes from the command line, otherwise a UUID is used. // - IceStorm::TopicPrx topic; - objSeq = query->findAllReplicas(topicReplica); - set<IceStorm::TopicPrx> topics; - for(p = objSeq.begin(); p != objSeq.end(); ++p) + // id is not directly altered since it is used below to detect + // whether subscribeAndGetPublisher can raise AlreadySubscribed. + // + Ice::Identity subId; + subId.name = id; + if(subId.name.empty()) { - topic = IceStorm::TopicPrx::uncheckedCast(*p); - topic->subscribeAndGetPublisher(IceStorm::QoS(), clock); - topics.insert(topic); + subId.name = IceUtil::generateUUID(); + } + Ice::ObjectPrx subscriber = adapter->add(new ClockI, subId); + + IceStorm::QoS qos; + if(!retryCount.empty()) + { + qos["retryCount"] = retryCount; } // - // Create and start thread to check for new IceStorm instances coming online. + // Set up the proxy. // - InstanceCheckThreadPtr instanceCheck = - new InstanceCheckThread(query, topicName, clock, managerReplica, managers, topicReplica, topics); - instanceCheck->start(); + if(option == Datagram) + { + if(batch) + { + subscriber = subscriber->ice_batchDatagram(); + } + else + { + subscriber = subscriber->ice_datagram(); + } + } + else if(option == Twoway) + { + // Do nothing to the subscriber proxy. Its already twoway. + } + else if(option == Ordered) + { + // Do nothing to the subscriber proxy. Its already twoway. + qos["reliability"] = "ordered"; + } + else if(option == Oneway || option == None) + { + if(batch) + { + subscriber = subscriber->ice_batchOneway(); + } + else + { + subscriber = subscriber->ice_oneway(); + } + } + try + { + topic->subscribeAndGetPublisher(qos, subscriber); + } + catch(const IceStorm::AlreadySubscribed&) + { + // If we're manually setting the subscriber id ignore. + if(id.empty()) + { + throw; + } + cout << "reactivating persistent subscriber" << endl; + } adapter->activate(); + shutdownOnInterrupt(); communicator()->waitForShutdown(); - instanceCheck->terminate(); - instanceCheck->getThreadControl().join(); - - // - // Unsubscribe from all topics. - // - objSeq = query->findAllReplicas(topicReplica); - for(p = objSeq.begin(); p != objSeq.end(); ++p) - { - topic = IceStorm::TopicPrx::uncheckedCast(*p); - topic->unsubscribe(clock); - } + topic->unsubscribe(subscriber); return EXIT_SUCCESS; } diff --git a/cpp/demo/IceStorm/replicated/application.xml b/cpp/demo/IceStorm/replicated/application.xml index 65f10019719..df06c34af41 100644 --- a/cpp/demo/IceStorm/replicated/application.xml +++ b/cpp/demo/IceStorm/replicated/application.xml @@ -6,8 +6,10 @@ <parameter name="index"/> <parameter name="topic-manager-endpoints" default="default"/> <parameter name="publish-endpoints" default="default"/> + <parameter name="node-endpoints" default="default"/> + <parameter name="instance-name"/> - <icebox id="DemoIceStorm-${index}" exe="icebox" activation="on-demand"> + <icebox id="${instance-name}-${index}" exe="icebox" activation="on-demand"> <service name="IceStorm" entry="IceStormService,33:createIceStorm"> @@ -15,17 +17,22 @@ <adapter name="${service}.TopicManager" endpoints="${topic-manager-endpoints}" - replica-group="IceStormTopicManagerReplicaGroup"/> + replica-group="${instance-name}-TopicManagerReplicaGroup"/> - <adapter name="${service}.Publish" - endpoints="${publish-endpoints}" - replica-group="IceStormPublishReplicaGroup"/> + <adapter name="${service}.Publish" + endpoints="${publish-endpoints}" + replica-group="${instance-name}-PublishReplicaGroup"/> + + <adapter name="${service}.Node" + endpoints="${node-endpoints}"/> <properties> - <property name="${service}.InstanceName" value="DemoIceStorm"/> + <property name="${service}.InstanceName" value="${instance-name}"/> <property name="${service}.Trace.TopicManager" value="2"/> <property name="${service}.Trace.Topic" value="1"/> <property name="${service}.Trace.Subscriber" value="1"/> + <property name="${service}.Trace.Election" value="1"/> + <property name="${service}.NodeId" value="${index}"/> </properties> </service> @@ -33,17 +40,17 @@ </icebox> </server-template> - <replica-group id="IceStormPublishReplicaGroup"> + <replica-group id="DemoIceStorm-PublishReplicaGroup"> </replica-group> - <replica-group id="IceStormTopicManagerReplicaGroup"> + <replica-group id="DemoIceStorm-TopicManagerReplicaGroup"> <object identity="DemoIceStorm/TopicManager" type="::IceStorm::TopicManager"/> </replica-group> <node name="localhost"> - <server-instance template="IceStorm" index="1"/> - <server-instance template="IceStorm" index="2"/> - <server-instance template="IceStorm" index="3"/> + <server-instance template="IceStorm" index="1" instance-name="DemoIceStorm"/> + <server-instance template="IceStorm" index="2" instance-name="DemoIceStorm"/> + <server-instance template="IceStorm" index="3" instance-name="DemoIceStorm"/> </node> </application> diff --git a/cpp/demo/IceStorm/replicated2/.depend b/cpp/demo/IceStorm/replicated2/.depend new file mode 100644 index 00000000000..b70ddcd8b28 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/.depend @@ -0,0 +1,5 @@ +Clock$(OBJEXT): Clock.cpp Clock.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h +Publisher$(OBJEXT): Publisher.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Clock.h +Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Clock.h +Clock.cpp: Clock.ice +Clock.ice: $(SLICE2CPP) $(SLICEPARSERLIB) diff --git a/cpp/demo/IceStorm/replicated2/.gitignore b/cpp/demo/IceStorm/replicated2/.gitignore new file mode 100644 index 00000000000..f6c88071874 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/.gitignore @@ -0,0 +1,10 @@ +// Generated by makegitignore.py + +// IMPORTANT: Do not edit this file -- any edits made here will be lost! +publisher +subscriber +Clock.cpp +Clock.h +db1/* +db2/* +db3/* diff --git a/cpp/demo/IceStorm/replicated2/Clock.ice b/cpp/demo/IceStorm/replicated2/Clock.ice new file mode 100644 index 00000000000..ca19916a636 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/Clock.ice @@ -0,0 +1,23 @@ +// ********************************************************************** +// +// 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. +// +// ********************************************************************** + +#ifndef CLOCK_ICE +#define CLOCK_ICE + +module Demo +{ + +interface Clock +{ + void tick(string time); +}; + +}; + +#endif diff --git a/cpp/demo/IceStorm/replicated2/Makefile b/cpp/demo/IceStorm/replicated2/Makefile new file mode 100644 index 00000000000..fbc9daa2564 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/Makefile @@ -0,0 +1,47 @@ +# ********************************************************************** +# +# 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. +# +# ********************************************************************** + +top_srcdir = ../../.. + +PUBLISHER = publisher +SUBSCRIBER = subscriber + +TARGETS = $(PUBLISHER) $(SUBSCRIBER) + +OBJS = Clock.o + +POBJS = Publisher.o + +SOBJS = Subscriber.o + +SRCS = $(OBJS:.o=.cpp) \ + $(POBJS:.o=.cpp) \ + $(SOBJS:.o=.cpp) + +SLICE_SRCS = Clock.ice + +include $(top_srcdir)/config/Make.rules + +CPPFLAGS := -I. $(CPPFLAGS) +LIBS := -lIceStorm $(LIBS) + +$(PUBLISHER): $(OBJS) $(POBJS) + rm -f $@ + $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(POBJS) $(LIBS) + +$(SUBSCRIBER): $(OBJS) $(SOBJS) + rm -f $@ + $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(SOBJS) $(LIBS) + +clean:: + -rm -f db1/* + -rm -f db2/* + -rm -f db3/* + +include .depend diff --git a/cpp/demo/IceStorm/replicated2/Makefile.mak b/cpp/demo/IceStorm/replicated2/Makefile.mak new file mode 100644 index 00000000000..a9e74475207 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/Makefile.mak @@ -0,0 +1,54 @@ +# ********************************************************************** +# +# 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. +# +# ********************************************************************** + +top_srcdir = ..\..\.. + +PUBLISHER = publisher.exe +SUBSCRIBER = subscriber.exe + +TARGETS = $(PUBLISHER) $(SUBSCRIBER) + +OBJS = Clock.obj + +POBJS = Publisher.obj + +SOBJS = Subscriber.obj + +SRCS = $(OBJS:.obj=.cpp) \ + $(POBJS:.obj=.cpp) \ + $(SOBJS:.obj=.cpp) + + +!include $(top_srcdir)/config/Make.rules.mak + +CPPFLAGS = -I. $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN +LIBS = $(libdir)\icestorm$(LIBSUFFIX).lib $(LIBS) + +!if "$(CPP_COMPILER)" != "BCC2006" && "$(OPTIMIZE)" != "yes" +PPDBFLAGS = /pdb:$(PUBLISHER:.exe=.pdb) +SPDBFLAGS = /pdb:$(SUBSCRIBER:.exe=.pdb) +!endif + +$(PUBLISHER): $(OBJS) $(POBJS) + $(LINK) $(LD_EXEFLAGS) $(PPDBFLAGS) $(SETARGV) $(OBJS) $(POBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS) + @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \ + $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest + +$(SUBSCRIBER): $(OBJS) $(SOBJS) + $(LINK) $(LD_EXEFLAGS) $(SPDBFLAGS) $(SETARGV) $(OBJS) $(SOBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS) + @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \ + $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest + +clean:: + -del /q Clock.cpp Clock.h + +clean:: + -for %f in (db\*) do if not %f == db\.gitignore del /q %f + +!include .depend diff --git a/cpp/demo/IceStorm/replicated2/Publisher.cpp b/cpp/demo/IceStorm/replicated2/Publisher.cpp new file mode 100644 index 00000000000..36fbf10b0f6 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/Publisher.cpp @@ -0,0 +1,151 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2008 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/IceUtil.h> +#include <Ice/Ice.h> +#include <IceStorm/IceStorm.h> + +#include <Clock.h> + +using namespace std; +using namespace Demo; + +class Publisher : public Ice::Application +{ +public: + + virtual int run(int, char*[]); +}; + +int +main(int argc, char* argv[]) +{ + Publisher app; + return app.main(argc, argv, "config.pub"); +} + +void +usage(const string& n) +{ + cerr << "Usage: " << n << " [--datagram|--twoway|--oneway] [topic]" << endl; +} + +int +Publisher::run(int argc, char* argv[]) +{ + enum Option { None, Datagram, Twoway, Oneway }; + Option option = None; + string topicName = "time"; + int i; + + for(i = 1; i < argc; ++i) + { + string optionString = argv[i]; + Option oldoption = option; + if(optionString == "--datagram") + { + option = Datagram; + } + else if(optionString == "--twoway") + { + option = Twoway; + } + else if(optionString == "--oneway") + { + option = Oneway; + } + else if(optionString.substr(0, 2) == "--") + { + usage(argv[0]); + return EXIT_FAILURE; + } + else + { + topicName = argv[i++]; + break; + } + + if(oldoption != option && oldoption != None) + { + usage(argv[0]); + return EXIT_FAILURE; + } + } + + if(i != argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + + IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast( + communicator()->propertyToProxy("TopicManager.Proxy")); + if(!manager) + { + cerr << appName() << ": invalid proxy" << endl; + return EXIT_FAILURE; + } + + // + // Retrieve the topic. + // + IceStorm::TopicPrx topic; + try + { + topic = manager->retrieve(topicName); + } + catch(const IceStorm::NoSuchTopic&) + { + try + { + topic = manager->create(topicName); + } + catch(const IceStorm::TopicExists&) + { + cerr << appName() << ": temporary failure. try again." << endl; + return EXIT_FAILURE; + } + } + + // + // Get the topic's publisher object, and create a Clock proxy with + // the mode specified as an argument of this application. + // + Ice::ObjectPrx publisher = topic->getPublisher(); + if(option == Datagram) + { + publisher = publisher->ice_datagram(); + } + else if(option == Twoway) + { + // Do nothing. + } + else if(option == Oneway || option == None) + { + publisher = publisher->ice_oneway(); + } + + ClockPrx clock = ClockPrx::uncheckedCast(publisher); + + cout << "publishing tick events. Press ^C to terminate the application." << endl; + try + { + while(true) + { + clock->tick(IceUtil::Time::now().toDateTime()); + IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(1)); + } + } + catch(const Ice::CommunicatorDestroyedException&) + { + // Ignore + } + + return EXIT_SUCCESS; +} diff --git a/cpp/demo/IceStorm/replicated2/README b/cpp/demo/IceStorm/replicated2/README new file mode 100644 index 00000000000..8d1470061eb --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/README @@ -0,0 +1,25 @@ +This demo demonstrates how to configure and deploy IceStorm in a +replicated fashion without using IceGrid. + +To run the demo, start the three IceStorm replicas. In three separate +windows: + +$ icebox --Ice.Config=config.ib1 +$ icebox --Ice.Config=config.ib2 +$ icebox --Ice.Config=config.ib3 + +And then in a separate window: + +$ subscriber + +In another window: + +$ publisher + +While the publisher continues to run, "tick" messages should be +displayed in the subscriber window. + +The subscribers and publishers do not have to do anything special to +take advantage of the replication. The subscriber and publisher are +identical to the publisher and subscriber in the clock directory. See +../clock/README for instructions on running them. diff --git a/cpp/demo/IceStorm/replicated2/Subscriber.cpp b/cpp/demo/IceStorm/replicated2/Subscriber.cpp new file mode 100644 index 00000000000..1d7faf18673 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/Subscriber.cpp @@ -0,0 +1,258 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2008 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/IceUtil.h> +#include <Ice/Ice.h> +#include <IceStorm/IceStorm.h> + +#include <Clock.h> + +using namespace std; +using namespace Demo; + +class ClockI : public Clock +{ +public: + + virtual void + tick(const string& time, const Ice::Current&) + { + cout << time << endl; + } +}; + +class Subscriber : public Ice::Application +{ +public: + + virtual int run(int, char*[]); +}; + +int +main(int argc, char* argv[]) +{ + Subscriber app; + return app.main(argc, argv, "config.sub"); +} + +void +usage(const string& n) +{ + cerr << "Usage: " << n + << " [--batch] [--datagram|--twoway|--ordered|--oneway] [--retryCount count] [--id id] [topic]" << endl; +} + +int +Subscriber::run(int argc, char* argv[]) +{ + Ice::StringSeq args = Ice::argsToStringSeq(argc, argv); + args = communicator()->getProperties()->parseCommandLineOptions("Clock", args); + Ice::stringSeqToArgs(args, argc, argv); + + bool batch = false; + enum Option { None, Datagram, Twoway, Oneway, Ordered}; + Option option = None; + string topicName = "time"; + string id; + string retryCount; + int i; + + for(i = 1; i < argc; ++i) + { + string optionString = argv[i]; + Option oldoption = option; + if(optionString == "--datagram") + { + option = Datagram; + } + else if(optionString == "--twoway") + { + option = Twoway; + } + else if(optionString == "--oneway") + { + option = Oneway; + } + else if(optionString == "--ordered") + { + option = Ordered; + } + else if(optionString == "--batch") + { + batch = true; + } + else if(optionString == "--id") + { + ++i; + if(i >= argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + id = argv[i]; + } + else if(optionString == "--retryCount") + { + ++i; + if(i >= argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + retryCount = argv[i]; + } + else if(optionString.substr(0, 2) == "--") + { + usage(argv[0]); + return EXIT_FAILURE; + } + else + { + topicName = argv[i++]; + break; + } + + if(oldoption != option && oldoption != None) + { + usage(argv[0]); + return EXIT_FAILURE; + } + } + + if(i != argc) + { + usage(argv[0]); + return EXIT_FAILURE; + } + + if(!retryCount.empty()) + { + if(option == None) + { + option = Twoway; + } + else if(option != Twoway && option != Ordered) + { + cerr << argv[0] << ": retryCount requires a twoway proxy" << endl; + return EXIT_FAILURE; + } + } + + if(batch && (option == Twoway || option == Ordered)) + { + cerr << argv[0] << ": batch can only be set with oneway or datagram" << endl; + return EXIT_FAILURE; + } + + IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast( + communicator()->propertyToProxy("TopicManager.Proxy")); + if(!manager) + { + cerr << appName() << ": invalid proxy" << endl; + return EXIT_FAILURE; + } + + IceStorm::TopicPrx topic; + try + { + topic = manager->retrieve(topicName); + } + catch(const IceStorm::NoSuchTopic&) + { + try + { + topic = manager->create(topicName); + } + catch(const IceStorm::TopicExists&) + { + cerr << appName() << ": temporary failure. try again." << endl; + return EXIT_FAILURE; + } + } + + Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Clock.Subscriber"); + + // + // Add a servant for the Ice object. If --id is used the identity + // comes from the command line, otherwise a UUID is used. + // + // id is not directly altered since it is used below to detect + // whether subscribeAndGetPublisher can raise AlreadySubscribed. + // + Ice::Identity subId; + subId.name = id; + if(subId.name.empty()) + { + subId.name = IceUtil::generateUUID(); + } + Ice::ObjectPrx subscriber = adapter->add(new ClockI, subId); + + IceStorm::QoS qos; + if(!retryCount.empty()) + { + qos["retryCount"] = retryCount; + } + + // + // Set up the proxy. + // + if(option == Datagram) + { + if(batch) + { + subscriber = subscriber->ice_batchDatagram(); + } + else + { + subscriber = subscriber->ice_datagram(); + } + } + else if(option == Twoway) + { + // Do nothing to the subscriber proxy. Its already twoway. + } + else if(option == Ordered) + { + // Do nothing to the subscriber proxy. Its already twoway. + qos["reliability"] = "ordered"; + } + else if(option == Oneway || option == None) + { + if(batch) + { + subscriber = subscriber->ice_batchOneway(); + } + else + { + subscriber = subscriber->ice_oneway(); + } + } + + try + { + topic->subscribeAndGetPublisher(qos, subscriber); + } + catch(const IceStorm::AlreadySubscribed&) + { + // If we're manually setting the subscriber id ignore. + if(id.empty()) + { + throw; + } + cout << "reactivating persistent subscriber" << endl; + } + adapter->activate(); + + shutdownOnInterrupt(); + communicator()->waitForShutdown(); + + topic->unsubscribe(subscriber); + + return EXIT_SUCCESS; +} diff --git a/cpp/demo/IceStorm/replicated2/config.ib1 b/cpp/demo/IceStorm/replicated2/config.ib1 new file mode 100644 index 00000000000..461a826bb4f --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/config.ib1 @@ -0,0 +1,32 @@ +# +# The IceBox server endpoint configuration +# +IceBox.ServiceManager.Endpoints=tcp -p 9990 + +# +# The IceStorm service +# +IceBox.Service.IceStorm=IceStormService,33:createIceStorm --Ice.Config=config.s1 + +# +# Warn about connection exceptions +# +#Ice.Warn.Connections=1 + +# +# Network Tracing +# +# 0 = no network tracing +# 1 = trace connection establishment and closure +# 2 = like 1, but more detailed +# 3 = like 2, but also trace data transfer +# +#Ice.Trace.Network=1 + +# +# Protocol Tracing +# +# 0 = no protocol tracing +# 1 = trace protocol messages +# +#Ice.Trace.Protocol=1 diff --git a/cpp/demo/IceStorm/replicated2/config.ib2 b/cpp/demo/IceStorm/replicated2/config.ib2 new file mode 100644 index 00000000000..54a0f3ad796 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/config.ib2 @@ -0,0 +1,32 @@ +# +# The IceBox server endpoint configuration +# +IceBox.ServiceManager.Endpoints=tcp -p 9991 + +# +# The IceStorm service +# +IceBox.Service.IceStorm=IceStormService,33:createIceStorm --Ice.Config=config.s2 + +# +# Warn about connection exceptions +# +#Ice.Warn.Connections=1 + +# +# Network Tracing +# +# 0 = no network tracing +# 1 = trace connection establishment and closure +# 2 = like 1, but more detailed +# 3 = like 2, but also trace data transfer +# +#Ice.Trace.Network=1 + +# +# Protocol Tracing +# +# 0 = no protocol tracing +# 1 = trace protocol messages +# +#Ice.Trace.Protocol=1 diff --git a/cpp/demo/IceStorm/replicated2/config.ib3 b/cpp/demo/IceStorm/replicated2/config.ib3 new file mode 100644 index 00000000000..c12a6328483 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/config.ib3 @@ -0,0 +1,32 @@ +# +# The IceBox server endpoint configuration +# +IceBox.ServiceManager.Endpoints=tcp -p 9993 + +# +# The IceStorm service +# +IceBox.Service.IceStorm=IceStormService,33:createIceStorm --Ice.Config=config.s3 + +# +# Warn about connection exceptions +# +#Ice.Warn.Connections=1 + +# +# Network Tracing +# +# 0 = no network tracing +# 1 = trace connection establishment and closure +# 2 = like 1, but more detailed +# 3 = like 2, but also trace data transfer +# +#Ice.Trace.Network=1 + +# +# Protocol Tracing +# +# 0 = no protocol tracing +# 1 = trace protocol messages +# +#Ice.Trace.Protocol=1 diff --git a/cpp/demo/IceStorm/replicated2/config.pub b/cpp/demo/IceStorm/replicated2/config.pub new file mode 100644 index 00000000000..e7d497f8f52 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/config.pub @@ -0,0 +1,14 @@ +# +# This property is used by the clients to connect to IceStorm. +# +TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000 + +# +# Network Tracing +# +# 0 = no network tracing +# 1 = trace connection establishment and closure +# 2 = like 1, but more detailed +# 3 = like 2, but also trace data transfer +# +#Ice.Trace.Network=1 diff --git a/cpp/demo/IceStorm/replicated2/config.s1 b/cpp/demo/IceStorm/replicated2/config.s1 new file mode 100644 index 00000000000..9bc2a1bca73 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/config.s1 @@ -0,0 +1,112 @@ +# This property configures the node id. It must be a positive integer. +IceStorm.NodeId=0 + +# This property configures the replicated node endpoints. +IceStorm.Node.Endpoints=default -p 13000 + +# This set of properties configures the replicated node proxies. Each +# property is of the form +# IceStorm.Nodes.<id>=<instance-name>/node<id>:<endpoints> +# +# All nodes must be included in this list. +IceStorm.Nodes.0=DemoIceStorm/node0:default -p 13000 +IceStorm.Nodes.1=DemoIceStorm/node1:default -p 13010 +IceStorm.Nodes.2=DemoIceStorm/node2:default -p 13020 + +# Node tracing properties. +IceStorm.Trace.Election=1 +IceStorm.Trace.Replication=1 + +# The interval in seconds at which a slave checks the status of the +# coordinator. +#IceStorm.Election.MasterTimeout=2 + +# The interval in seconds at which a coordinator attempts to form +# larger groups of replicas. +#IceStorm.Election.ElectionTimeout=2 + +# The interval in seconds that a replica waits for replies to an +# invitation to form a larger group. Lower priority wait for intervals +# inversely proporitional to the maximum priority. +#IceStorm.Election.ResponseTimeout=2 + +# +# This property defines the endpoints on which the IceStorm +# TopicManager listens. +# +IceStorm.TopicManager.Endpoints=default -p 10000 + +# This property defines the endpoints contained in proxies to topics. +IceStorm.ReplicatedTopicManagerEndpoints=default -p 10000:default -p 10010:default -p 10020 + +# +# The IceStorm service instance name. +# +IceStorm.InstanceName=DemoIceStorm + +# +# This property defines the endpoints on which the topic +# publisher objects listen. If you want to federate +# IceStorm instances this must run on a fixed port (or use +# IceGrid). +# +IceStorm.Publish.Endpoints=default -p 10001:udp -p 10001 + +# This property defines the endpoints contained in publisher proxies. +IceStorm.ReplicatedPublishEndpoints=default -p 10001:default -p 10011:default -p 10021:udp -p 10001:udp -p 10011:udp -p 10021 + +# +# TopicManager Tracing +# +# 0 = no tracing +# 1 = trace topic creation, subscription, unsubscription +# 2 = like 1, but with more detailed subscription information +# +IceStorm.Trace.TopicManager=2 + +# +# Topic Tracing +# +# 0 = no tracing +# 1 = trace unsubscription diagnostics +# +IceStorm.Trace.Topic=1 + +# +# Subscriber Tracing +# +# 0 = no tracing +# 1 = subscriber diagnostics (subscription, unsubscription, event +# propagation failures) +# +IceStorm.Trace.Subscriber=1 + +# +# Flush Tracing (for batch mode transfer flushing) +# +# 0 = no tracing +# 1 = trace activity of flusher thread +# +IceStorm.Trace.Flush=1 + +# +# Amount of time in milliseconds between flushes for batch mode +# transfer. The minimum allowable value is 100ms. +# +IceStorm.Flush.Timeout=2000 + +# +# Network Tracing +# +# 0 = no network tracing +# 1 = trace connection establishment and closure +# 2 = like 1, but more detailed +# 3 = like 2, but also trace data transfer +# +#Ice.Trace.Network=1 + +# +# This property defines the home directory of the Freeze +# database environment for the IceStorm service. +# +Freeze.DbEnv.IceStorm.DbHome=db1 diff --git a/cpp/demo/IceStorm/replicated2/config.s2 b/cpp/demo/IceStorm/replicated2/config.s2 new file mode 100644 index 00000000000..b785c32c96f --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/config.s2 @@ -0,0 +1,112 @@ +# This property configures the node id. It must be a positive integer. +IceStorm.NodeId=1 + +# This property configures the replicated node endpoints. +IceStorm.Node.Endpoints=default -p 13010 + +# This set of properties configures the replicated node proxies. Each +# property is of the form +# IceStorm.Nodes.<id>=<instance-name>/node<id>:<endpoints> +# +# All nodes must be included in this list. +IceStorm.Nodes.0=DemoIceStorm/node0:default -p 13000 +IceStorm.Nodes.1=DemoIceStorm/node1:default -p 13010 +IceStorm.Nodes.2=DemoIceStorm/node2:default -p 13020 + +# Node tracing properties. +IceStorm.Trace.Election=1 +IceStorm.Trace.Replication=1 + +# The interval in seconds at which a slave checks the status of the +# coordinator. +#IceStorm.Election.MasterTimeout=2 + +# The interval in seconds at which a coordinator attempts to form +# larger groups of replicas. +#IceStorm.Election.ElectionTimeout=2 + +# The interval in seconds that a replica waits for replies to an +# invitation to form a larger group. Lower priority wait for intervals +# inversely proporitional to the maximum priority. +#IceStorm.Election.ResponseTimeout=2 + +# +# This property defines the endpoints on which the IceStorm +# TopicManager listens. +# +IceStorm.TopicManager.Endpoints=default -p 10010 + +# This property defines the endpoints contained in proxies to topics. +IceStorm.ReplicatedTopicManagerEndpoints=default -p 10000:default -p 10010:default -p 10020 + +# +# The IceStorm service instance name. +# +IceStorm.InstanceName=DemoIceStorm + +# +# This property defines the endpoints on which the topic +# publisher objects listen. If you want to federate +# IceStorm instances this must run on a fixed port (or use +# IceGrid). +# +IceStorm.Publish.Endpoints=default -p 10011:udp -p 10011 + +# This property defines the endpoints contained in publisher proxies. +IceStorm.ReplicatedPublishEndpoints=default -p 10001:default -p 10011:default -p 10021:udp -p 10001:udp -p 10011:udp -p 10021 + +# +# TopicManager Tracing +# +# 0 = no tracing +# 1 = trace topic creation, subscription, unsubscription +# 2 = like 1, but with more detailed subscription information +# +IceStorm.Trace.TopicManager=2 + +# +# Topic Tracing +# +# 0 = no tracing +# 1 = trace unsubscription diagnostics +# +IceStorm.Trace.Topic=1 + +# +# Subscriber Tracing +# +# 0 = no tracing +# 1 = subscriber diagnostics (subscription, unsubscription, event +# propagation failures) +# +IceStorm.Trace.Subscriber=1 + +# +# Flush Tracing (for batch mode transfer flushing) +# +# 0 = no tracing +# 1 = trace activity of flusher thread +# +IceStorm.Trace.Flush=1 + +# +# Amount of time in milliseconds between flushes for batch mode +# transfer. The minimum allowable value is 100ms. +# +IceStorm.Flush.Timeout=2000 + +# +# Network Tracing +# +# 0 = no network tracing +# 1 = trace connection establishment and closure +# 2 = like 1, but more detailed +# 3 = like 2, but also trace data transfer +# +#Ice.Trace.Network=1 + +# +# This property defines the home directory of the Freeze +# database environment for the IceStorm service. +# +Freeze.DbEnv.IceStorm.DbHome=db2 diff --git a/cpp/demo/IceStorm/replicated2/config.s3 b/cpp/demo/IceStorm/replicated2/config.s3 new file mode 100644 index 00000000000..74f6e6b8908 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/config.s3 @@ -0,0 +1,112 @@ +# This property configures the node id. It must be a positive integer. +IceStorm.NodeId=2 + +# This property configures the replicated node endpoints. +IceStorm.Node.Endpoints=default -p 13020 + +# This set of properties configures the replicated node proxies. Each +# property is of the form +# IceStorm.Nodes.<id>=<instance-name>/node<id>:<endpoints> +# +# All nodes must be included in this list. +IceStorm.Nodes.0=DemoIceStorm/node0:default -p 13000 +IceStorm.Nodes.1=DemoIceStorm/node1:default -p 13010 +IceStorm.Nodes.2=DemoIceStorm/node2:default -p 13020 + +# Node tracing properties. +IceStorm.Trace.Election=1 +IceStorm.Trace.Replication=1 + +# The interval in seconds at which a slave checks the status of the +# coordinator. +#IceStorm.Election.MasterTimeout=2 + +# The interval in seconds at which a coordinator attempts to form +# larger groups of replicas. +#IceStorm.Election.ElectionTimeout=2 + +# The interval in seconds that a replica waits for replies to an +# invitation to form a larger group. Lower priority wait for intervals +# inversely proporitional to the maximum priority. +#IceStorm.Election.ResponseTimeout=2 + +# +# This property defines the endpoints on which the IceStorm +# TopicManager listens. +# +IceStorm.TopicManager.Endpoints=default -p 10020 + +# This property defines the endpoints contained in proxies to topics. +IceStorm.ReplicatedTopicManagerEndpoints=default -p 10000:default -p 10010:default -p 10020 + +# +# The IceStorm service instance name. +# +IceStorm.InstanceName=DemoIceStorm + +# +# This property defines the endpoints on which the topic +# publisher objects listen. If you want to federate +# IceStorm instances this must run on a fixed port (or use +# IceGrid). +# +IceStorm.Publish.Endpoints=default -p 10021:udp -p 10021 + +# This property defines the endpoints contained in publisher proxies. +IceStorm.ReplicatedPublishEndpoints=default -p 10001:default -p 10011:default -p 10021:udp -p 10001:udp -p 10011:udp -p 10021 + +# +# TopicManager Tracing +# +# 0 = no tracing +# 1 = trace topic creation, subscription, unsubscription +# 2 = like 1, but with more detailed subscription information +# +IceStorm.Trace.TopicManager=2 + +# +# Topic Tracing +# +# 0 = no tracing +# 1 = trace unsubscription diagnostics +# +IceStorm.Trace.Topic=1 + +# +# Subscriber Tracing +# +# 0 = no tracing +# 1 = subscriber diagnostics (subscription, unsubscription, event +# propagation failures) +# +IceStorm.Trace.Subscriber=1 + +# +# Flush Tracing (for batch mode transfer flushing) +# +# 0 = no tracing +# 1 = trace activity of flusher thread +# +IceStorm.Trace.Flush=1 + +# +# Amount of time in milliseconds between flushes for batch mode +# transfer. The minimum allowable value is 100ms. +# +IceStorm.Flush.Timeout=2000 + +# +# Network Tracing +# +# 0 = no network tracing +# 1 = trace connection establishment and closure +# 2 = like 1, but more detailed +# 3 = like 2, but also trace data transfer +# +#Ice.Trace.Network=1 + +# +# This property defines the home directory of the Freeze +# database environment for the IceStorm service. +# +Freeze.DbEnv.IceStorm.DbHome=db3 diff --git a/cpp/demo/IceStorm/replicated2/config.sub b/cpp/demo/IceStorm/replicated2/config.sub new file mode 100644 index 00000000000..24a7d8d73e5 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/config.sub @@ -0,0 +1,20 @@ +# +# This property is used to configure the endpoints of the clock +# subscriber adapter. +# +Clock.Subscriber.Endpoints=tcp:udp + +# +# This property is used by the clients to connect to IceStorm. +# +TopicManager.Proxy=DemoIceStorm/TopicManager:default -p 10000:default -p 10010:default -p 10020 + +# +# Network Tracing +# +# 0 = no network tracing +# 1 = trace connection establishment and closure +# 2 = like 1, but more detailed +# 3 = like 2, but also trace data transfer +# +#Ice.Trace.Network=1 diff --git a/cpp/demo/IceStorm/replicated2/db1/.gitignore b/cpp/demo/IceStorm/replicated2/db1/.gitignore new file mode 100644 index 00000000000..005f76775fa --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/db1/.gitignore @@ -0,0 +1,8 @@ +// Generated by makegitignore.py + +// IMPORTANT: Do not edit this file -- any edits made here will be lost! +publisher +subscriber +Clock.cpp +Clock.h +db/* diff --git a/cpp/demo/IceStorm/replicated2/db2/.gitignore b/cpp/demo/IceStorm/replicated2/db2/.gitignore new file mode 100644 index 00000000000..005f76775fa --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/db2/.gitignore @@ -0,0 +1,8 @@ +// Generated by makegitignore.py + +// IMPORTANT: Do not edit this file -- any edits made here will be lost! +publisher +subscriber +Clock.cpp +Clock.h +db/* diff --git a/cpp/demo/IceStorm/replicated2/db3/.gitignore b/cpp/demo/IceStorm/replicated2/db3/.gitignore new file mode 100644 index 00000000000..005f76775fa --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/db3/.gitignore @@ -0,0 +1,8 @@ +// Generated by makegitignore.py + +// IMPORTANT: Do not edit this file -- any edits made here will be lost! +publisher +subscriber +Clock.cpp +Clock.h +db/* diff --git a/cpp/demo/IceStorm/replicated2/expect.py b/cpp/demo/IceStorm/replicated2/expect.py new file mode 100755 index 00000000000..b303c340957 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/expect.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# ********************************************************************** +# +# 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. +# +# ********************************************************************** + +import pexpect, sys, os + +try: + import demoscript +except ImportError: + for toplevel in [".", "..", "../..", "../../..", "../../../.."]: + toplevel = os.path.normpath(toplevel) + if os.path.exists(os.path.join(toplevel, "demoscript")): + break + else: + raise "can't find toplevel directory!" + sys.path.append(os.path.join(toplevel)) + import demoscript + +import demoscript.Util +import demoscript.IceStorm.clock + +demoscript.IceStorm.clock.run('./subscriber', './publisher') diff --git a/cpp/demo/IceStorm/replicated2/replicated2C.dsp b/cpp/demo/IceStorm/replicated2/replicated2C.dsp new file mode 100644 index 00000000000..b382c9c79e2 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/replicated2C.dsp @@ -0,0 +1,157 @@ +# Microsoft Developer Studio Project File - Name="replicated2C" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=replicated2C - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "replicated2C.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "replicated2C.mak" CFG="replicated2C - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "replicated2C - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "replicated2C - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "replicated2C - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /WX /GR /GX /O2 /I "." /I "../../../include" /I "../../../include/stlport" /D "_CONSOLE" /D "NDEBUG" /D "WIN32_LEAN_AND_MEAN" /FD /c
+# SUBTRACT CPP /Fr /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 IceStorm.lib IceGrid.lib Ice.lib IceUtil.lib setargv.obj /nologo /subsystem:console /pdb:none /machine:I386 /out:"publisher.exe" /libpath:"../../../lib" /FIXED:no
+# SUBTRACT LINK32 /debug
+
+!ELSEIF "$(CFG)" == "replicated2C - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /WX /Gm /GR /GX /Zi /Od /I "." /I "../../../include" /I "../../../include/stlport" /D "_CONSOLE" /D "_DEBUG" /D "WIN32_LEAN_AND_MEAN" /FD /GZ /c
+# SUBTRACT CPP /Fr /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 IceStormd.lib IceGridd.lib Iced.lib IceUtild.lib setargv.obj /nologo /subsystem:console /debug /machine:I386 /out:"publisher.exe" /pdbtype:sept /libpath:"../../../lib" /FIXED:no
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "replicated2C - Win32 Release"
+# Name "replicated2C - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Clock.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Publisher.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\Clock.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\Clock.ice
+
+!IF "$(CFG)" == "replicated2C - Win32 Release"
+
+USERDEP__CLOCK="..\..\..\bin\slice2cpp.exe" "..\..\..\lib\slice.lib"
+# Begin Custom Build
+InputPath=.\Clock.ice
+
+BuildCmds= \
+ ..\..\..\bin\slice2cpp.exe Clock.ice
+
+"Clock.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"Clock.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "replicated2C - Win32 Debug"
+
+USERDEP__CLOCK="..\..\..\bin\slice2cpp.exe" "..\..\..\lib\sliced.lib"
+# Begin Custom Build
+InputPath=.\Clock.ice
+
+BuildCmds= \
+ ..\..\..\bin\slice2cpp.exe Clock.ice
+
+"Clock.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"Clock.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\README
+# End Source File
+# End Target
+# End Project
diff --git a/cpp/demo/IceStorm/replicated2/replicated2S.dsp b/cpp/demo/IceStorm/replicated2/replicated2S.dsp new file mode 100644 index 00000000000..cee078aef18 --- /dev/null +++ b/cpp/demo/IceStorm/replicated2/replicated2S.dsp @@ -0,0 +1,157 @@ +# Microsoft Developer Studio Project File - Name="replicated2S" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=replicated2S - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "replicated2S.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "replicated2S.mak" CFG="replicated2S - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "replicated2S - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "replicated2S - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "replicated2S - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /WX /GR /GX /O2 /I "." /I "../../../include" /I "../../../include/stlport" /D "_CONSOLE" /D "NDEBUG" /D "WIN32_LEAN_AND_MEAN" /FD /c
+# SUBTRACT CPP /Fr /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 IceStorm.lib IceGrid.lib Ice.lib IceUtil.lib setargv.obj /nologo /subsystem:console /pdb:none /machine:I386 /out:"subscriber.exe" /libpath:"../../../lib" /FIXED:no
+# SUBTRACT LINK32 /debug
+
+!ELSEIF "$(CFG)" == "replicated2S - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /WX /Gm /GR /GX /Zi /Od /I "." /I "../../../include" /I "../../../include/stlport" /D "_CONSOLE" /D "_DEBUG" /D "WIN32_LEAN_AND_MEAN" /FD /GZ /c
+# SUBTRACT CPP /Fr /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 IceStormd.lib IceGridd.lib Iced.lib IceUtild.lib setargv.obj /nologo /subsystem:console /debug /machine:I386 /out:"subscriber.exe" /pdbtype:sept /libpath:"../../../lib" /FIXED:no
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "replicated2S - Win32 Release"
+# Name "replicated2S - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Clock.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Subscriber.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\Clock.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\Clock.ice
+
+!IF "$(CFG)" == "replicated2S - Win32 Release"
+
+USERDEP__CLOCK="..\..\..\bin\slice2cpp.exe" "..\..\..\lib\slice.lib"
+# Begin Custom Build
+InputPath=.\Clock.ice
+
+BuildCmds= \
+ ..\..\..\bin\slice2cpp.exe Clock.ice
+
+"Clock.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"Clock.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "replicated2S - Win32 Debug"
+
+USERDEP__CLOCK="..\..\..\bin\slice2cpp.exe" "..\..\..\lib\sliced.lib"
+# Begin Custom Build
+InputPath=.\Clock.ice
+
+BuildCmds= \
+ ..\..\..\bin\slice2cpp.exe Clock.ice
+
+"Clock.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"Clock.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\README
+# End Source File
+# End Target
+# End Project
|