ice环境初始化和slice方法调用

原创 2012年03月21日 22:17:48
1、客户端环境调用
#include<Ice/Ice.h>
int main(int argc, char* argv[])
{
    Ice::CommunicatorPtr ic;
   try
   {
       ic = Ice::initialize(argc, argv);

       Ice::ObjectPrx base = ic->stringToProxy("MyProxy:default -p 10000");
       if (!base)
       {
           throw "Can not find proxy";
       }

        MyProxyPrx proxy = MyProxyPrx::checkCast(base);
       if (!proxy)
       {
           throw "Invalid Proxy";
       }

       proxy->op();
   }
   catch(const Ice::Exception& ex)
   {
   }
   catch(const std::string& msg)
   {
   }
   catch(const char* msg)
   {
   }

   if (ic)
   {
      ic->destory();
   }

   return 0;
}


2、服务器端环境调用
#include<Ice/Ice.h>
int main(int argc, char* argv[])
{
    Ice::CommunicatorPtr ic;
   try
   {
       ic = Ice::initialize(argc, argv);

       Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints("MyAdapter", "default -p 10000");

       MyProxyPtr proxy = new MyProxyI();
       adapter->add(proxy, communicator()->stringToIdentity("MyProxy"));

       adapter->activate();

       ic->waitForShutdown();
   }
   catch(const Ice::Exception& ex)
   {
   }
   catch(const std::string& msg)
   {
   }
   catch(const char* msg)
   {
   }

   if (ic)
   {
       ic->destory();
   }

   return 0;
}


3、Application对象
class Application
{
public:
    Application(SignalPolicy = HandleSignals);

public:
    int main(int, char*[], const Ice::InitializationData& = Ice::InitializationData());
    int main(int, char*[], const char*);


public:
    virtual int run(int, char*[]) = 0;
    virtual void interruptCallback(int);


public:
    static const char* appName();
    static CommunicatorPtr communicator();
    static bool interrupted();
};
定义类,继承至Ice::Application,实现run方法,在main函数中调用Application::main()即可。需要知道Application的main方法帮你完成了如下事情
A、创建并设置了一个异常句柄,用来捕获程序运行过程中异常并打印到标准输出
B、调用Ice::initialize初始化来创建通信器,并在主循环结束后调用通信器的destory方法
C、扫描输入参数并将ICE支持的参数剥离掉后返回给run方法
D、提供appName方法获取应用名称,即argv[0],提供communicator方法获取通信器
E、创建信号处理器,用来捕获系统信号并处理
F、创建一个日志处理对象,用来输出系统日志到错误输出
在run方法的实现中,可以通过调用interrupted方法判断是否是外部信号中断了程序运行


4、Service对象
class Service
{
public:
    virtual bool shutdown();
    virtual void interrupt();

public:
    int main(int&, char*[], const InitializationData& = InitializationData());
    Ice::CommunicatorPtr communicator() const;
    static Service* instance();
    bool service() const;
    std::string name() const;
    virtual void handleInterrupt(int);

protected:
    virtual bool start(int, char*[], int&) = 0;
    virtual void waitForShutdown();
    virtual bool stop();
    virtual Ice::CommunicatorPtr initializeCommunicator(int&, char*[], const InitializationData&);

protected:
    virtual void syserror(const std::string&);
    virtual void error(const std::string&);
    virtual void warning(const std::string&);
    virtual void trace(const std::string&);
    virtual void print(const std::string&);
};
定义类,继承至Ice:Service,实现start方法,在main函数中调用Service::main()即可。需要知道Service的run方法帮你完成了如下事情:
A、创建一个信号处理对象,用来捕获系统信号并处理
B、调用initializeCommunicator方法创建ICE的通信对象,并在主循环结束后调用通信器的destory方法
C、调用start方法,如果start方法返回false则结束
D、调用waitForShutdown方法等待主循环结束,主循环可通过调用shutdown方法结束
E、调用stop方法
F、回收系统资源
Service程序运行支持如下命令行参数:--daemon、--pidfile file、--noclose、--nochdir
Service由于在--daemon启动后关闭了标准输出的描述符,因此日志不起作用,如果需要自定义日志,需要子类重新定义initializeCommunicator
方法并安装一个日志对象来记录运行日志

ICE 初始化

1.安装ice, 新建基于对话框的MFC程序; 2. 添加*.ice 文件; 3. 解决方案资源管理器-右键项目-勾选ice builder选项; 自动生成chat.h 和chat.cpp文件; 4....
  • a379039233
  • a379039233
  • 2015年06月26日 16:46
  • 1105

详细教你如何部署ICE服务(一)

这系列文章将会一步步教你如何部署一个ICE服务,如果你正在读这篇博客,我想你已经了解了什么是ICE(Internet Communications Engine),以及如何去实现ICE服务,并且了解什...
  • u011784767
  • u011784767
  • 2017年07月04日 19:39
  • 2653

ice环境初始化和slice方法调用

1、客户端环境调用 #include int main(int argc, char* argv[]) {     Ice::CommunicatorPtr ic;    try    {...
  • followshake
  • followshake
  • 2012年03月21日 22:17
  • 2482

Ice笔记-利用Ice::Application类简化Ice应用

Ice笔记-利用Ice::Application类简化Ice应用作者:ydogg,转载请申明。 在编写Ice相关应用时,无论是Client还是Server端,都必须进行一些必要的动作,如:Ice通信器...
  • ydogg
  • ydogg
  • 2007年11月08日 15:56
  • 6779

ICE学习(六)-Slice语言介绍

Slice语言介绍 Slice (Specification Language for Ice)语言建立了一种服务器和客户端之间的契约,他描述了接口和数据类型。这种描述和语言无关,因此,客户端和服务...
  • kaede999
  • kaede999
  • 2014年09月17日 09:30
  • 1753

ICE:slice语言常识整理

ICE:Slice语言(二)--源文件和词法规则:    文件命名    Slice的源文件以.ice为扩展名。   对于大小写不区分的系统(例如DOS),文件的扩展名可以大写,也可以小写...
  • chary8088
  • chary8088
  • 2013年12月22日 15:15
  • 3648

用spring的InitializingBean的afterPropertiesSet来初始化

org.springframework.beans.factory包下有一个接口是InitializingBean 只有一个方法: /**   * Invoked by a BeanFacto...
  • wabiaozia
  • wabiaozia
  • 2016年06月06日 14:31
  • 1641

ICE入门之hello world

本文主要讲解ICE入门第一个hello world程序编写,内容来源于ICE官方文档。
  • wuche2010
  • wuche2010
  • 2016年12月26日 10:26
  • 465

ICE学习笔记(01):Slice规范

【colorado】按语:本文是DPWI第4章的笔记。在3.3.1版的1~9章中与1.3.0版马维达先生中译本相应章节的内容基本相同,变化比较小,可以参考马维达先生的译本。 Slice 在客户与服务器...
  • Colorado
  • Colorado
  • 2009年11月26日 10:30
  • 9367

zeroC ice slice 语法总结

1、ice中对module的定义类似于c#中对namespace的定义; 2、在interface中只能定义方法(抽象的方法),不能再定义类型和变量;方法接口支持变参定义,但只支持输入参数 (in)和...
  • u012846041
  • u012846041
  • 2014年01月03日 10:04
  • 1522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ice环境初始化和slice方法调用
举报原因:
原因补充:

(最多只允许输入30个字)