コード例 #1
0
ファイル: Client.cpp プロジェクト: herclogon/ice
int
run(int, char**, const Ice::CommunicatorPtr& communicator)
{
    InitialPrx allTests(const Ice::CommunicatorPtr&);
    InitialPrx initial = allTests(communicator);
    initial->shutdown();
    return EXIT_SUCCESS;
}
コード例 #2
0
ファイル: Client.cpp プロジェクト: Jonavin/ice
int
run(int, char**, const Ice::CommunicatorPtr& communicator)
{
    Ice::ObjectFactoryPtr factory = new MyObjectFactory;
    communicator->addObjectFactory(factory, "::Test::B");
    communicator->addObjectFactory(factory, "::Test::C");
    communicator->addObjectFactory(factory, "::Test::D");
    communicator->addObjectFactory(factory, "::Test::E");
    communicator->addObjectFactory(factory, "::Test::F");
    communicator->addObjectFactory(factory, "::Test::I");
    communicator->addObjectFactory(factory, "::Test::J");
    communicator->addObjectFactory(factory, "::Test::H");

    InitialPrx allTests(const Ice::CommunicatorPtr&);
    InitialPrx initial = allTests(communicator);
    initial->shutdown();
    return EXIT_SUCCESS;
}
コード例 #3
0
ファイル: Client.cpp プロジェクト: bholl/zeroc-ice
int
ValueClient::run(int argc, char* argv[])
{
    if(argc > 1)
    {
        cerr << appName() << ": too many arguments" << endl;
        return EXIT_FAILURE;
    }

    InitialPrx initial = InitialPrx::checkedCast(communicator()->propertyToProxy("Initial.Proxy"));
    if(!initial)
    {
        cerr << argv[0] << ": invalid object reference" << endl;
        return EXIT_FAILURE;
    }

    char c[2];

    cout << '\n'
         << "Let's first transfer a simple object, for a class without\n"
         << "operations, and print its contents. No factory is required\n"
         << "for this.\n"
         << "[press enter]\n";
    cin.getline(c, 2);

    SimplePtr simple = initial->getSimple();
    cout << "==> " << simple->message << endl;

    cout << '\n'
         << "Yes, this worked. Now let's try to transfer an object for a class\n"
         << "with operations as type ::Demo::Printer, without installing a factory first.\n"
         << "This should give us a `no factory' exception.\n"
         << "[press enter]\n";
    cin.getline(c, 2);

    PrinterPtr printer;
    PrinterPrx printerProxy;
    try
    {
        initial->getPrinter(printer, printerProxy);
        cerr << argv[0] << "Did not get the expected NoObjectFactoryException!" << endl;
        exit(EXIT_FAILURE);
    }
    catch(const Ice::NoObjectFactoryException& ex)
    {
        cout << "==> " << ex << endl;
    }

    cout << '\n'
         << "Yep, that's what we expected. Now let's try again, but with\n"
         << "installing an appropriate factory first. If successful, we print\n"
         << "the object's content.\n"
         << "[press enter]\n";
    cin.getline(c, 2);

    Ice::ObjectFactoryPtr factory = new ObjectFactory;
    communicator()->addObjectFactory(factory, Demo::Printer::ice_staticId());

    initial->getPrinter(printer, printerProxy);
    cout << "==> " << printer->message << endl;

    cout << '\n'
         << "Cool, it worked! Let's try calling the printBackwards() method\n"
         << "on the object we just received locally.\n"
         << "[press enter]\n";
    cin.getline(c, 2);

    cout << "==> ";
    printer->printBackwards();

    cout << '\n'
         << "Now we call the same method, but on the remote object. Watch the\n"
         << "server's output.\n"
         << "[press enter]\n";
    cin.getline(c, 2);

    printerProxy->printBackwards();

    cout << '\n'
         << "Next, we transfer a derived object from the server as a base\n"
         << "object. Since we haven't yet installed a factory for the derived\n"
         << "class, the derived class (::Demo::DerivedPrinter) is sliced\n"
         << "to its base class (::Demo::Printer).\n"
         << "[press enter]\n";
    cin.getline(c, 2);

    PrinterPtr derivedAsBase;
    derivedAsBase = initial->getDerivedPrinter();
    cout << "==> The type ID of the received object is \"" << derivedAsBase->ice_id() << "\"" << endl;
    assert(derivedAsBase->ice_id() == Demo::Printer::ice_staticId());
    
    cout << '\n'
         << "Now we install a factory for the derived class, and try again.\n"
         << "Because we receive the derived object as a base object, we\n"
         << "we need to do a dynamic_cast<> to get from the base to the derived object.\n"
         << "[press enter]\n";
    cin.getline(c, 2);
    
    communicator()->addObjectFactory(factory, Demo::DerivedPrinter::ice_staticId());
    
    derivedAsBase = initial->getDerivedPrinter();
    DerivedPrinterPtr derived = DerivedPrinterPtr::dynamicCast(derivedAsBase);
    assert(derived);
    cout << "==> dynamic_cast<> to derived object succeded" << endl;
    cout << "==> The type ID of the received object is \"" << derived->ice_id() << "\"" << endl;

    cout << '\n'
         << "Let's print the message contained in the derived object, and\n"
         << "call the operation printUppercase() on the derived object\n"
         << "locally.\n"
         << "[press enter]\n";
    cin.getline(c, 2);

    cout << "==> " << derived->derivedMessage << endl;
    cout << "==> ";
    derived->printUppercase();

    cout << '\n'
         << "Finally, we try the same again, but instead of returning the\n"
         << "derived object, we throw an exception containing the derived\n"
         << "object.\n"
         << "[press enter]\n";
    cin.getline(c, 2);

    try
    {
        initial->throwDerivedPrinter();
        cerr << argv[0] << ": Did not get the expected DerivedPrinterException!" << endl;
        exit(EXIT_FAILURE);
    }
    catch(const DerivedPrinterException& ex)
    {
        derived = ex.derived;
        if(!derived)
        {
            cerr << argv[0] << "Unexpected null pointer for `derived'" << endl;
            exit(EXIT_FAILURE);
        }
    }

    cout << "==> " << derived->derivedMessage << endl;
    cout << "==> ";
    derived->printUppercase();

    cout << '\n'
         << "That's it for this demo. Have fun with Ice!\n";

    initial->shutdown();

    return EXIT_SUCCESS;
}