コード例 #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
ファイル: AllTests.cpp プロジェクト: pedia/zeroc-ice
InitialPrx
allTests(const Ice::CommunicatorPtr& communicator)
{
    cout << "testing stringToProxy... " << flush;
    string ref = "initial:default -p 12010";
    Ice::ObjectPrx base = communicator->stringToProxy(ref);
    test(base);
    cout << "ok" << endl;

    cout << "testing checked cast... " << flush;
    InitialPrx initial = InitialPrx::checkedCast(base);
    test(initial);
    test(initial == base);
    cout << "ok" << endl;

    cout << "testing constructor, copy constructor, and assignment operator... " << flush;

    BasePtr ba1 = new Base;
    test(ba1->theS.str == "");
    test(ba1->str == "");

    S s;
    s.str = "hello";
    BasePtr ba2 = new Base(s, "hi");
    test(ba2->theS.str == "hello");
    test(ba2->str == "hi");

    *ba1 = *ba2;
    test(ba1->theS.str == "hello");
    test(ba1->str == "hi");

    BasePtr bp1 = new Base();
    *bp1 = *ba2;
    test(bp1->theS.str == "hello");
    test(bp1->str == "hi");

    cout << "ok" << endl;

    cout << "testing ice_clone..." << flush;

    BasePtr bp2 = BasePtr::dynamicCast(bp1->ice_clone());
    test(bp1->theS.str == bp2->theS.str);
    test(bp1->str == bp2->str);
    
    AbstractBasePtr abp1 = new AbstractBaseI;
    try
    {
        abp1->ice_clone();
        test(false);
    }
    catch(const Ice::CloneNotImplementedException&)
    {
    }
    cout << "ok" << endl;

    cout << "getting B1... " << flush;
    BPtr b1 = initial->getB1();
    test(b1);
    cout << "ok" << endl;
    
    cout << "getting B2... " << flush;
    BPtr b2 = initial->getB2();
    test(b2);
    cout << "ok" << endl;
    
    cout << "getting C... " << flush;
    CPtr c = initial->getC();
    test(c);
    cout << "ok" << endl;
    
    cout << "getting D... " << flush;
    DPtr d = initial->getD();
    test(d);
    cout << "ok" << endl;
    
    cout << "checking consistency... " << flush;
    test(b1 != b2);
    test(b1 != c);
    test(b1 != d);
    test(b2 != c);
    test(b2 != d);
    test(c != d);
    test(b1->theB == b1);
    test(b1->theC == 0);
    test(BPtr::dynamicCast(b1->theA));
    test(BPtr::dynamicCast(b1->theA)->theA == b1->theA);
    test(BPtr::dynamicCast(b1->theA)->theB == b1);
    test(CPtr::dynamicCast(BPtr::dynamicCast(b1->theA)->theC));
    test(CPtr::dynamicCast(BPtr::dynamicCast(b1->theA)->theC)->theB == b1->theA);

    test(b1->preMarshalInvoked);
    test(b1->postUnmarshalInvoked());
    test(b1->theA->preMarshalInvoked);
    test(b1->theA->postUnmarshalInvoked());
    test(BPtr::dynamicCast(b1->theA)->theC->preMarshalInvoked);
    test(BPtr::dynamicCast(b1->theA)->theC->postUnmarshalInvoked());
    
    // More tests possible for b2 and d, but I think this is already sufficient.
    test(b2->theA == b2);
    test(d->theC == 0);
    cout << "ok" << endl;

    cout << "getting B1, B2, C, and D all at once... " << flush;
    initial->getAll(b1, b2, c, d);
    test(b1);
    test(b2);
    test(c);
    test(d);
    cout << "ok" << endl;
    
    cout << "checking consistency... " << flush;
    test(b1 != b2);
    test(b1 != c);
    test(b1 != d);
    test(b2 != c);
    test(b2 != d);
    test(c != d);
    test(b1->theA == b2);
    test(b1->theB == b1);
    test(b1->theC == 0);
    test(b2->theA == b2);
    test(b2->theB == b1);
    test(b2->theC == c);
    test(c->theB == b2);
    test(d->theA == b1);
    test(d->theB == b2);
    test(d->theC == 0);
    
    test(d->preMarshalInvoked);
    test(d->postUnmarshalInvoked());
    test(d->theA->preMarshalInvoked);
    test(d->theA->postUnmarshalInvoked());
    test(d->theB->preMarshalInvoked);
    test(d->theB->postUnmarshalInvoked());
    test(d->theB->theC->preMarshalInvoked);
    test(d->theB->theC->postUnmarshalInvoked());

    cout << "ok" << endl;

    cout << "testing protected members... " << flush;
    EPtr e = initial->getE();
    test(e->checkValues());
    FPtr f = initial->getF();
    test(f->checkValues());
    test(f->e2->checkValues());
    cout << "ok" << endl;

    cout << "getting I, J and H... " << flush;
    IPtr i = initial->getI();
    test(i);
    IPtr j = initial->getJ();
    test(j && JPtr::dynamicCast(j));
    IPtr h = initial->getH();
    test(h && HPtr::dynamicCast(h));
    cout << "ok" << endl;

    cout << "setting I... " << flush;
    initial->setI(i);
    initial->setI(j);
    initial->setI(h);
    cout << "ok" << endl;

    cout << "testing sequences... " << flush;
    BaseSeq inS, outS, retS;
    retS = initial->opBaseSeq(inS, outS);

    inS.resize(1);
    inS[0] = new Base();
    retS = initial->opBaseSeq(inS, outS);
    test(retS.size() == 1 && outS.size() == 1);
    cout << "ok" << endl;

    cout << "testing compact ID..." << flush;
    try
    {
        test(initial->getCompact());
    }
    catch(const Ice::OperationNotExistException&)
    {
    }
    cout << "ok" << endl;

    cout << "testing UnexpectedObjectException... " << flush;
    testUOE(communicator);
    cout << "ok" << endl;

    return initial;
}
コード例 #4
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;
}