summaryrefslogtreecommitdiff
path: root/cpp/test/IceStorm/stress/Subscriber.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/test/IceStorm/stress/Subscriber.cpp')
-rw-r--r--cpp/test/IceStorm/stress/Subscriber.cpp52
1 files changed, 24 insertions, 28 deletions
diff --git a/cpp/test/IceStorm/stress/Subscriber.cpp b/cpp/test/IceStorm/stress/Subscriber.cpp
index 3bf45842cec..313fb47c485 100644
--- a/cpp/test/IceStorm/stress/Subscriber.cpp
+++ b/cpp/test/IceStorm/stress/Subscriber.cpp
@@ -18,14 +18,6 @@
#include <TestCommon.h>
-#include <fcntl.h>
-#ifdef _WIN32
-# include <io.h>
-#else
-# include <sys/types.h>
-# include <sys/stat.h>
-#endif
-
using namespace std;
using namespace Ice;
using namespace IceStorm;
@@ -174,20 +166,6 @@ private:
IceUtil::StaticMutex ErraticEventI::_remainingMutex = ICE_STATIC_MUTEX_INITIALIZER;
int ErraticEventI::_remaining = 0;
-void
-usage(const char* appName)
-{
- cerr << "Usage: " << appName << " [options]\n";
- cerr <<
- "Options:\n"
- "-h, --help Show this message.\n"
- "--events <e> Terminate after <e> are received.\n"
- "--qos <key>,<value><e> Subscribe with this QoS.\n"
- "--erratic <n> Add <n> erratic subscribers.\n"
- "--slow The subscribers sleeps 3 seconds after each event.\n"
- ;
-}
-
struct Subscription
{
Ice::ObjectAdapterPtr adapter;
@@ -277,6 +255,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("SubscriberAdapter", "default");
+ string reliability = "";
EventIPtr servant;
if(erratic)
{
@@ -297,15 +276,20 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
}
else
{
- map<string, string>::const_iterator reliability = qos.find("reliability");
- if(reliability != qos.end())
+ map<string, string>::iterator p = qos.find("reliability");
+ if(p != qos.end())
{
- if(reliability->second == "twoway ordered")
+ reliability = p->second;
+ if(reliability != "ordered")
{
- servant = new OrderEventI(communicator, events);
+ qos.erase(p);
}
}
- if(!servant)
+ if(reliability == "ordered")
+ {
+ servant = new OrderEventI(communicator, events);
+ }
+ else
{
servant = new CountEventI(communicator, events);
}
@@ -338,8 +322,20 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
for(vector<Subscription>::iterator p = subs.begin(); p != subs.end(); ++p)
{
p->obj = p->adapter->addWithUUID(p->servant);
+ if(reliability == "twoway" || reliability == "ordered")
+ {
+ // Do nothing.
+ }
+ else if(reliability == "batch")
+ {
+ p->obj = p->obj->ice_batchOneway();
+ }
+ else //if(reliability == "oneway")
+ {
+ p->obj = p->obj->ice_oneway();
+ }
p->adapter->activate();
- topic->subscribe(qos, p->obj);
+ topic->subscribeAndGetPublisher(qos, p->obj);
}
}