ICE代码详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
服务器端代码:主要包括几个大的类。
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
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
#include
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类。