簡述
例子雖然短小,但是基本上反映了ICE對分佈式系統建模的思想和方法。結合以上6篇文章,應該就能夠輕鬆邁入ICE框架學習的大門,比起買《zero ice權威指南》那本坑人的書要好的多。
協議
#pragma once
module Demo
{
interface Printer
{
void printString(string s);
};
};
客戶端
#include <Ice/Ice.h>
#include <Printer.h>
#include <stdexcept>
using namespace std;
using namespace Demo;
int main(int argc, char * argv[])
{
try
{
//
Ice::CommunicatorHolder icHolder = Ice::initialize(argc, argv);
//Ice::ObjectPrx就是Ice對象的代理。下面這個是直接代理,代理的目標對象在端點(endpoint)"localhost:10000"上。
Ice::ObjectPrx base = icHolder->stringToProxy("SimplePrinter:default -h localhost -p
10000");
//由於Ice::ObjectPrx抽象層次太高,需要將其向下轉化到該目標對象的具體代理實現PrinterPrx
PrinterPrx printer = PrinterPrx::checkedCast(base);
if(!printer)
{
throw std::runtime_error("Invalid proxy");
}
//通過代理,現在就可以對目標對象進行訪問
printer->printString("Hello World!");
}
catch(const std::exception& ex)
{
cerr << ex.what() << endl;
return 1;
}
return 0;
}
服務端
#include <Ice/Ice.h>
#include <Printer.h>
using namespace std;
using namespace Demo;
//PrintI就是ICE服務員
class PrinterI : public Printer
{
public:
virtual void printString(const string &, const Ice::Current&);
};
void PrinterI::printString(const string &s, const Ice::Current&)
{
cout << s << endl;
}
int main(int argc, char* argv[])
{
try
{
Ice::CommunicatorHolder icHolder = Ice::initialize(argc, argv);
//Ice::ObjectAdapterPtr就是ICE適配器。適配器首先要綁定端點(endpoint),端點地址爲"localhost:10000"
Ice::ObjectAdapterPtr adapter = icHolder->createObjectAdapterWithEndpoints("SimplePrinterAdapter",
"default -h localhost -p 10000");
//接下來,適配器把ICE服務員和ICE對象綁定起來
Ice::ObjectPtr object = new PrinterI;
adapter->add(object, icHolder->stringToIdentity("SimplePrinter"));
//適配器激活以後就開始工作啦
adapter->activate();
icHolder->waitForShutdown();
}
catch(const std::exception& e)
{
cerr << e.what() << endl;
return 1;
}
return 0;
}
參考
更多的demo地址參考ICE在github上的主頁