1,Ice::Application 此类中有一个main的方法,main的方法中调用了run()函数。
ICE框架的服务配置结构:
class ResTransferServer : public Ice::Application
{
public:
virtual int run(int argc, char* argv[])
{
Ice::CommunicatorPtr communicator = this->communicator(); //得到一个通信器指针
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("PUSHResourceTransferSvrObjectAdapter"); //创建一个配置器指针
Ice::PropertiesPtr properties = communicator->getProperties(); //创建一个通信器的权限
PUSH::ResTransferPtr resTransSvr = new ResTransferI;
adapter->add(resTransSvr, communicator->stringToIdentity(properties->getProperty("Identity"))); //增加一个适配器
adapter->activate();//激发启动一个通信器
communicator->waitForShutdown(); //通信器在这里等待处理数据连接
return EXIT_SUCCESS;
}
};
int main(int argc, char* argv[])
{
Ice::InitializationData initData; //初始化ICE相关的数据;原型是 Ice::initialize
initData.properties = Ice::createProperties(); //创建通信器的属性接口
initData.properties->setProperty("BuildId", std::string("Ice ") + ICE_STRING_VERSION);//设置所有者的相关属性,或者通信器的所有属性,ICE中属性的原型接口为Properties()
PUSHResTransferServer app; //实际的服务对象
int status = app.main(argc, argv, initData);
//这里对象调用main的原因是公有继承Ice::Application类中的mian函数
return status; //返回结果传递给主线程,使系统来处理其他业务
}
2,ICE框架中slice生成的类都是抽象类,我们要重新继承他实现对此类中数据及方法的实例化的类
3,在ICE的一部调用中特别注意的几点,用具体的实例来说明
具体的函数实现参数说明
virtual void downRes_async(const PUSH::AMD_ResTransfer_downResPtr& amdPtr, const ::PUSH::Wmmp3MsgHead&, const PUSH::Wmmp3MsgDownRes& request, const ::Ice::Current& = ::Ice::Current());
注意:
ICE的每个方法都提供了一个Ice::Current的对象,这个对象主要是存储ICE框架中的各个骨架信息的参数类的对象。例如,adapter适配器,ctx数据内容的类对象等等。
具体结构如下:
module Ice {
local dictionary<string, string> Context;
enum OperationMode {
Normal, \Nonmutating, \Idempotent };
local struct Current {