summaryrefslogtreecommitdiff
path: root/cpp/demo/IceStorm/clock/Publisher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/demo/IceStorm/clock/Publisher.cpp')
-rw-r--r--cpp/demo/IceStorm/clock/Publisher.cpp49
1 files changed, 20 insertions, 29 deletions
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();
}