summaryrefslogtreecommitdiff
path: root/cpp/demo/IceGrid/customLoadBalancing/Client.cpp
blob: a397ba5eb8ffe7c7bf6c4ba1138063e4e69e6535 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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;
}