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....

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

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

ICE 的常见运行错误

在编译和 Ice 应用相关的文件中,经常因为 ice 相关的文件包含关系而导致编译无法通过,此时的错误一般提示和 handle.h 相关。然而想要解决这样的错误,一般只需要把在无法编译成 .o 文件的...
  • educast
  • educast
  • 2013年07月19日 11:18
  • 3734

ICE常见问题的解决(一)

问:error C3861: “TryEnterCriticalSection”: 即使使用参数相关的查找,也未找到标识符答:增加预处理定义:_WIN32_WINNT=0X500问:ICE::Long...

浅入ICE组件编程

浅入ICE组件编程 Liuxuezong 2014.05.22 一、ICE介绍          ICE是ZeroC公司开发的一款高效的开源中间件平台,全称是InternetCommunica...

ICE的属性配置 C++版

(2011-09-13 20:57:05) 转载 标签: 杂谈   Ice的初始化函数initialize的输入参数正好是主函数的输入参数,也就是...

Ice笔记--C++线程与并发(小结)

C++线程与并发(Ice3.4.2) 概述 Ice服务器是多线程模型的。在涉及资源的访问和操作的时候将要考虑同步访问机制。 Ice线程库提供了一些与线程有关的抽象: 互斥体,递归互斥体,读写递...

slice2qt ice3.5.1 qt5.30版本

  • 2014年10月16日 09:18
  • 15.16MB
  • 下载

关于windows环境下QT开发ICE程序无法正确连接类库的解决方法

在使用QT开发ICE应用的时候,多数人还是会在windows环境的。居然遇到了ld链接错误,在论坛上转了一圈看到有人提出相同问题:http://topic.csdn.net/u/20110408/16...
  • cnhome
  • cnhome
  • 2011年04月26日 00:25
  • 2316

Ice 读书笔记--Slice语言

Slice语言   1. Slice(Specification Language for Ice)是一种用于使对象接口与其实现相分离的基础性抽象机制。 因为Slice描述的是接口和类型,它是一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ice环境初始化和slice方法调用
举报原因:
原因补充:

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