当前位置:文档之家› ICE代码详解

ICE代码详解

服务器端代码:主要包括几个大的类。

Ice::Communicator类:
Ice run time的主要进入点是由本地接口
Ice::Communicator来表示的。

和在客户端一样,在你在服务器中做任何别的事情之前,你必须调用
Ice::initialize,对Ice run time进行初始化。

Ice::initialize 返回一个智能指针,指向一个Ice::Communicator实例:int main(int argc, char * argv[])
{
Ice::CommunicatorPtr ic = Ice::initialize(argc, argv); // ...
}
在离开你的main函数之前,你必须调用Communicator::destroy。

destroy操作负责结束Ice run time。

特别地,destroy会等待任何还在运行
的操作调用完成。

此外,destroy还会确保任何还未完成的线程都得以汇合(joined),并收回一些操作系统资源,比如文件描述符和内存。

决不要让你的main函数不先调用destroy就终止;这样做会导致不确定的行为。

Ice::Application类:
#include <Ice/Ice.h>
class MyApplication : virtual public Ice::Application { public:
virtual int run(int, char * []) { //主要是来实现该run 的方法。

// Server code here...
return 0;
}
};
int
main(int argc, char * argv[])
{
MyApplication app;
return app.main(argc, argv);
}
Ice::Service类:
使用Ice::Service类的Ice应用至少要定义一个子类,并重新定义 start成员函数;服务必须在这个函数里执行其启动活动,比如处理命令
行参数、创建对象适配器、注册servants。

应用的main 函数必须实例化这个子类,调用其main成员函数,把程序的参数向量作为参数传给它。

下面的例子给出了一个最小限度的Ice::Service子类:
#include <Ice/Ice.h>
#include <Ice/Service.h>
class MyService : public Ice::Service {
protected:
virtual bool start(int, char * []);
private:
Ice::ObjectAdapterPtr _adapter;
};
bool MyService::start(int argc, char * argv[])
{
_adapter
= communicator()->createObjectAdapter("MyAdapt er");
_adapter->addWithUUID(new MyServantI); //用UUID来指定1个servant。

_adapter->activate(); //1个适配器包含1个servant还是多个?
return true;
}
int main(int argc, char * argv[])
{
MyService svc;
return svc.main(argc, argv);
}
linux守护进程命令行:--daemon,--noclose(阻止ice::service关闭无用的文件描述符),--nochdir(阻止ice::service变更当前目录)
Servant类:继承于ice::object类。

相关主题