summaryrefslogtreecommitdiff
path: root/cpp/demo/IceGrid/customLoadBalancing/Client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/demo/IceGrid/customLoadBalancing/Client.cpp')
-rw-r--r--cpp/demo/IceGrid/customLoadBalancing/Client.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/cpp/demo/IceGrid/customLoadBalancing/Client.cpp b/cpp/demo/IceGrid/customLoadBalancing/Client.cpp
new file mode 100644
index 00000000000..a397ba5eb8f
--- /dev/null
+++ b/cpp/demo/IceGrid/customLoadBalancing/Client.cpp
@@ -0,0 +1,91 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 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 <IceGrid/IceGrid.h>
+#include <Pricing.h>
+
+using namespace std;
+using namespace Demo;
+
+class PricingClient : public Ice::Application
+{
+public:
+
+ virtual int run(int, char*[]);
+};
+
+int
+main(int argc, char* argv[])
+{
+ PricingClient app;
+ return app.main(argc, argv, "config.client");
+}
+
+int
+PricingClient::run(int argc, char* argv[])
+{
+ if(argc > 1)
+ {
+ cerr << appName() << ": too many arguments" << endl;
+ return EXIT_FAILURE;
+ }
+
+ //
+ // Create a proxy to the well-known object with the `pricing'
+ // identity.
+ //
+ PricingEnginePrx pricing = PricingEnginePrx::uncheckedCast(communicator()->stringToProxy("pricing"));
+ if(!pricing)
+ {
+ cerr << argv[0] << ": couldn't find a `::Demo::PricingEngine' object." << endl;
+ return EXIT_FAILURE;
+ }
+
+ //
+ // If no context is set on the default locator (with the
+ // Ice.Default.Locator.Context property, see the comments from the
+ // `config.client' file in this directory), ask for the preferred
+ // currency.
+ //
+ Ice::Context ctx = communicator()->getDefaultLocator()->ice_getContext();
+ if(ctx["currency"].empty())
+ {
+ cout << "enter your preferred currency (USD, EUR, GBP, INR, AUD, JPY): ";
+ string currency;
+ cin >> currency;
+
+ //
+ // Setup a locator proxy with a currency context.
+ //
+ Ice::LocatorPrx locator = communicator()->getDefaultLocator();
+ ctx["currency"] = currency;
+ pricing = pricing->ice_locator(locator->ice_context(ctx));
+ }
+ else
+ {
+ cout << "Preferred currency configured for the client: " << ctx["currency"] << endl;
+ }
+
+ //
+ // Get the preferred currencies of the server
+ //
+ Ice::StringSeq currencies = pricing->getPreferredCurrencies();
+ cout << "Preferred currencies of the server: ";
+ for(Ice::StringSeq::const_iterator p = currencies.begin(); p != currencies.end(); ++p)
+ {
+ cout << *p;
+ if(p + 1 != currencies.end())
+ {
+ cout << ", ";
+ }
+ }
+ cout << endl;
+ return EXIT_SUCCESS;
+}