summaryrefslogtreecommitdiff
path: root/cpp/demo/Ice/invoke/Client.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2004-10-19 02:27:18 +0000
committerMark Spruiell <mes@zeroc.com>2004-10-19 02:27:18 +0000
commit4ee06da3e23c279897cef5b2b51487875b4486b7 (patch)
treee2080691778256ebf32ceabc7d8edce6e869fbad /cpp/demo/Ice/invoke/Client.cpp
parentupdating dependencies (diff)
downloadice-4ee06da3e23c279897cef5b2b51487875b4486b7.tar.bz2
ice-4ee06da3e23c279897cef5b2b51487875b4486b7.tar.xz
ice-4ee06da3e23c279897cef5b2b51487875b4486b7.zip
adding streaming API
Diffstat (limited to 'cpp/demo/Ice/invoke/Client.cpp')
-rw-r--r--cpp/demo/Ice/invoke/Client.cpp337
1 files changed, 337 insertions, 0 deletions
diff --git a/cpp/demo/Ice/invoke/Client.cpp b/cpp/demo/Ice/invoke/Client.cpp
new file mode 100644
index 00000000000..db6563a8bce
--- /dev/null
+++ b/cpp/demo/Ice/invoke/Client.cpp
@@ -0,0 +1,337 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2004 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 <Ice/Ice.h>
+#include <Printer.h>
+
+using namespace std;
+using namespace Demo;
+
+void
+menu()
+{
+ cout <<
+ "usage:\n"
+ "1: print string\n"
+ "2: print string sequence\n"
+ "3: print dictionary\n"
+ "4: print enum\n"
+ "5: print struct\n"
+ "6: print struct sequence\n"
+ "7: print class\n"
+ "8: get values\n"
+ "9: throw exception\n"
+ "s: shutdown server\n"
+ "x: exit\n"
+ "?: help\n";
+}
+
+static ostream&
+operator<<(ostream& out, Demo::Color c)
+{
+ switch(c)
+ {
+ case Demo::red:
+ out << "red";
+ break;
+ case Demo::green:
+ out << "green";
+ break;
+ case Demo::blue:
+ out << "blue";
+ break;
+ }
+ return out;
+}
+
+int
+run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator)
+{
+ Ice::PropertiesPtr properties = communicator->getProperties();
+ const char* proxyProperty = "Printer.Proxy";
+ string proxy = properties->getProperty(proxyProperty);
+ if(proxy.empty())
+ {
+ cerr << argv[0] << ": property `" << proxyProperty << "' not set" << endl;
+ return EXIT_FAILURE;
+ }
+
+ Ice::ObjectPrx obj = communicator->stringToProxy(proxy);
+
+ menu();
+
+ char ch;
+ do
+ {
+ try
+ {
+ cout << "==> ";
+ cin >> ch;
+ if(ch == '1')
+ {
+ //
+ // Marshal the in parameter.
+ //
+ Ice::ByteSeq inParams, outParams;
+ Ice::OutputStreamPtr out = Ice::createOutputStream(communicator);
+ out->writeString("The streaming API works!");
+ out->finished(inParams);
+
+ //
+ // Invoke operation.
+ //
+ if(!obj->ice_invoke("printString", Ice::Normal, inParams, outParams))
+ {
+ cout << "Unknown user exception" << endl;
+ }
+ }
+ else if(ch == '2')
+ {
+ //
+ // Marshal the in parameter.
+ //
+ Ice::ByteSeq inParams, outParams;
+ Ice::OutputStreamPtr out = Ice::createOutputStream(communicator);
+ Demo::StringSeq arr;
+ arr.push_back("The");
+ arr.push_back("streaming");
+ arr.push_back("API");
+ arr.push_back("works!");
+ out->writeStringSeq(arr);
+ out->finished(inParams);
+
+ //
+ // Invoke operation.
+ //
+ if(!obj->ice_invoke("printStringSequence", Ice::Normal, inParams, outParams))
+ {
+ cout << "Unknown user exception" << endl;
+ }
+ }
+ else if(ch == '3')
+ {
+ //
+ // Marshal the in parameter.
+ //
+ Ice::ByteSeq inParams, outParams;
+ Ice::OutputStreamPtr out = Ice::createOutputStream(communicator);
+ Demo::StringDict dict;
+ dict["The"] = "streaming";
+ dict["API"] = "works!";
+ Demo::ice_writeStringDict(out, dict);
+ out->finished(inParams);
+
+ //
+ // Invoke operation.
+ //
+ if(!obj->ice_invoke("printDictionary", Ice::Normal, inParams, outParams))
+ {
+ cout << "Unknown user exception" << endl;
+ }
+ }
+ else if(ch == '4')
+ {
+ //
+ // Marshal the in parameter.
+ //
+ Ice::ByteSeq inParams, outParams;
+ Ice::OutputStreamPtr out = Ice::createOutputStream(communicator);
+ Demo::ice_writeColor(out, Demo::green);
+ out->finished(inParams);
+
+ //
+ // Invoke operation.
+ //
+ if(!obj->ice_invoke("printEnum", Ice::Normal, inParams, outParams))
+ {
+ cout << "Unknown user exception" << endl;
+ }
+ }
+ else if(ch == '5')
+ {
+ //
+ // Marshal the in parameter.
+ //
+ Ice::ByteSeq inParams, outParams;
+ Ice::OutputStreamPtr out = Ice::createOutputStream(communicator);
+ Demo::Structure s;
+ s.name = "red";
+ s.value = Demo::red;
+ Demo::ice_writeStructure(out, s);
+ out->finished(inParams);
+
+ //
+ // Invoke operation.
+ //
+ if(!obj->ice_invoke("printStruct", Ice::Normal, inParams, outParams))
+ {
+ cout << "Unknown user exception" << endl;
+ }
+ }
+ else if(ch == '6')
+ {
+ //
+ // Marshal the in parameter.
+ //
+ Ice::ByteSeq inParams, outParams;
+ Ice::OutputStreamPtr out = Ice::createOutputStream(communicator);
+ Demo::StructureSeq arr;
+ arr.push_back(Demo::Structure());
+ arr.back().name = "red";
+ arr.back().value = Demo::red;
+ arr.push_back(Demo::Structure());
+ arr.back().name = "green";
+ arr.back().value = Demo::green;
+ arr.push_back(Demo::Structure());
+ arr.back().name = "blue";
+ arr.back().value = Demo::blue;
+ Demo::ice_writeStructureSeq(out, arr);
+ out->finished(inParams);
+
+ //
+ // Invoke operation.
+ //
+ if(!obj->ice_invoke("printStructSequence", Ice::Normal, inParams, outParams))
+ {
+ cout << "Unknown user exception" << endl;
+ }
+ }
+ else if(ch == '7')
+ {
+ //
+ // Marshal the in parameter.
+ //
+ Ice::ByteSeq inParams, outParams;
+ Ice::OutputStreamPtr out = Ice::createOutputStream(communicator);
+ Demo::CPtr c = new Demo::C;
+ c->s.name = "blue";
+ c->s.value = Demo::blue;
+ Demo::ice_writeC(out, c);
+ out->finished(inParams);
+
+ //
+ // Invoke operation.
+ //
+ if(!obj->ice_invoke("printClass", Ice::Normal, inParams, outParams))
+ {
+ cout << "Unknown user exception" << endl;
+ }
+ }
+ else if(ch == '8')
+ {
+ //
+ // Invoke operation.
+ //
+ Ice::ByteSeq inParams, outParams;
+ if(!obj->ice_invoke("getValues", Ice::Normal, inParams, outParams))
+ {
+ cout << "Unknown user exception" << endl;
+ continue;
+ }
+
+ //
+ // Unmarshal the results.
+ //
+ Ice::InputStreamPtr in = Ice::createInputStream(communicator, outParams);
+ Demo::CPtr c;
+ Demo::ice_readC(in, c);
+ string str = in->readString();
+ in->finished();
+ cout << "Got string `" << str << "' and class: s.name=" << c->s.name
+ << ", s.value=" << c->s.value << endl;
+ }
+ else if(ch == '9')
+ {
+ //
+ // Invoke operation.
+ //
+ Ice::ByteSeq inParams, outParams;
+ if(obj->ice_invoke("throwPrintFailure", Ice::Normal, inParams, outParams))
+ {
+ cout << "Expected exception" << endl;
+ continue;
+ }
+
+ Ice::InputStreamPtr in = Ice::createInputStream(communicator, outParams);
+ try
+ {
+ in->throwException();
+ }
+ catch(const Demo::PrintFailure& ex)
+ {
+ // Expected.
+ }
+ catch(const Ice::UserException& ex)
+ {
+ cout << "Unknown user exception" << endl;
+ }
+ }
+ else if(ch == 's')
+ {
+ Ice::ByteSeq inParams, outParams;
+ obj->ice_invoke("shutdown", Ice::Normal, inParams, outParams);
+ }
+ else if(ch == 'x')
+ {
+ // Nothing to do.
+ }
+ else if(ch == '?')
+ {
+ menu();
+ }
+ else
+ {
+ cout << "unknown command `" << ch << "'" << endl;
+ menu();
+ }
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ }
+ }
+ while(cin.good() && ch != 'x');
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ Ice::CommunicatorPtr communicator;
+
+ try
+ {
+ Ice::PropertiesPtr properties = Ice::createProperties();
+ properties->load("config");
+ communicator = Ice::initializeWithProperties(argc, argv, properties);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}