Skip to content

Latest commit

 

History

History
211 lines (174 loc) · 4.43 KB

README.md

File metadata and controls

211 lines (174 loc) · 4.43 KB

Ice for C++

Getting started C++11 | Examples C++11 | Getting started C++98 | Examples C++98 | NuGet packages | Documentation | Building from source

The Ice framework provides everything you need to build networked applications, including RPC, pub/sub, server deployment, and more.

Ice for C++ is the C++ implementation of Ice.

Sample Code with the Ice C++11 Mapping

// Slice definitions (Hello.ice)

#pragma once

module Demo
{
    interface Hello
    {
        void sayHello();
    }
}
// Client application (Client.cpp)

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

using namespace std;
using namespace Demo;

int
main(int argc, char* argv[])
{
    try
    {
        const Ice::CommunicatorHolder ich(argc, argv);
        auto hello = Ice::checkedCast<HelloPrx>(ich->stringToProxy("hello:default -h localhost -p 10000"));
        hello->sayHello();
    }
    catch(const std::exception& ex)
    {
        cerr << ex.what() << endl;
        return 1;
    }
    return 0;
}
// Server application (Server.cpp)

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

using namespace std;

int main(int argc, char* argv[])
{
    try
    {
        // CtrlCHandler must be created before the communicator or any other threads
        // are started
        Ice::CtrlCHandler ctrlCHandler;

        const Ice::CommunicatorHolder ich(argc, argv);
        const auto& communicator = ich.communicator();

        ctrlCHandler.setCallback(
            [communicator](int)
            {
                communicator->shutdown();
            });

        auto adapter = communicator->createObjectAdapterWithEndpoints(
            "Hello",
            "default -h localhost -p 10000");
        adapter->add(make_shared<HelloI>(), Ice::stringToIdentity("hello"));
        adapter->activate();
        communicator->waitForShutdown();
    }
    catch(const std::exception& ex)
    {
        cerr << ex.what() << endl;
        return 1;
    }
    return 0;
}
// Printer implementation (Printer.h)

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

class Printer : public Demo::Hello
{
public:
    /**
     * Prints a message to the standard output.
     **/
    virtual void sayHello(const Ice::Current&) override
    {
        std::cout << "Hello World!" << std::endl;
    }
}

Sample Code with the Ice C++98 Mapping

// Slice definitions (Hello.ice)

#pragma once

module Demo
{
    interface Hello
    {
        void sayHello();
    }
}
// Client application (Client.cpp)

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

using namespace std;
using namespace Demo;

int main(int argc, char* argv[])
{
    try
    {
        Ice::CommunicatorHolder ich(argc, argv);
        HelloPrx hello = HelloPrx::checkedCast(
            ich->stringToProxy("hello:default -h localhost -p 10000"));
        hello->sayHello();
    }
    catch(const std::exception& ex)
    {
        cerr << ex.what() << endl;
        return 1;
    }
    return 0;
}
// Server application (Server.cpp)

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

using namespace std;

int main(int argc, char* argv[])
{
    try
    {
        Ice::CommunicatorHolder ich(argc, argv);
        Ice::ObjectAdapterPtr adapter = ich->createObjectAdapterWithEndpoints(
            "Hello",
            "default -h localhost -p 10000");
        adapter->add(new HelloI, Ice::stringToIdentity("hello"));
        adapter->activate();
        ich->waitForShutdown();
    }
    catch(const std::exception& ex)
    {
        cerr << ex.what() << endl;
        return 1;
    }
    return 0;
}
// Printer implementation (Printer.h)

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

class Printer : public Demo::Hello
{
public:
    /**
     * Prints a message to the standard output.
     **/
    virtual void sayHello(const Ice::Current&)
    {
        std::cout << "Hello World!" << std::endl;
    }
}