Client.cpp 1.46 KB
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//

#include <Ice/Ice.h>
#include <Context.h>

using namespace std;
using namespace Demo;

int run(const shared_ptr<Ice::Communicator>&);

int
main(int argc, char* argv[])
{
#ifdef ICE_STATIC_LIBS
    Ice::registerIceSSL();
#endif

    int status = 0;

    try
    {
        //
        // CommunicatorHolder's ctor initializes an Ice communicator,
        // and its dtor destroys this communicator.
        //
        Ice::CommunicatorHolder ich(argc, argv, "config.client");

        //
        // The communicator initialization removes all Ice-related arguments from argc/argv
        //
        if(argc > 1)
        {
            cerr << argv[0] << ": too many arguments" << endl;
            status = 1;
        }
        else
        {
            status = run(ich.communicator());
        }
    }
    catch(const std::exception& ex)
    {
        cerr << argv[0] << ": " << ex.what() << endl;
        status = 1;
    }

    return status;
}

void menu();

int run(const shared_ptr<Ice::Communicator>& communicator)
{
    auto proxy = Ice::checkedCast<ContextPrx>(communicator->propertyToProxy("Context.Proxy"));
    if(!proxy)
    {
        cerr << "invalid proxy" << endl;
        return 1;
    }

    string token = proxy->login("user", "password");

    Ice::Context ctx;
    ctx["token"] = token;
    auto proxy2 = proxy->ice_context(ctx);
    proxy2->function();
    proxy->function(ctx);
    proxy->function();

    return 0;
}