Ice学习--简单的例子(服务端)

   Zeroc Ice是一款通信组件。其开发主要分一下几步:

  1) 编写slice文件

  2) 通过slice2cpp工具将slice文件翻译成相应的.h和.cpp文件

  3) 编写服务端

  4) 编写客户端


  以下仅以官方上的例子做说明:

 1、 slice文件定义printer.ice:

  module Demo

  {

       interface Printer

       {

           void printString(string str);

       };

 };

注意:

  a、 文件中必须要有根module,否则翻译失败

  b、 module翻译后对应C++的命名空间,interface翻译后对应C++的类名

  c、 module后interface中的} 必须跟';'符号,否则翻译失败


  2、 通过slice2cpp工具将printer.ice翻译成对应的.h和.cpp文件

  slice2cpp 命令如下:start slice2cpp printer.ice --stream

  可以发现对应目录下多出来两个文件:printer.h  printer.cpp


  3、 服务器编写:

  服务器编写首先要实现Printer接口:

  class PrinterImpl : public Demo::Printer

  {

        void printerString(const std::string &strIn, const Ice::Current /*= Ice::Current()*/)

        {

             std::cout<<strIn;

        }

  };


  服务器主体代码:

  void main(int args, char* argv)

  {

        Ice::CommunicatorPtr ic;

        try

        {

              ic = Ice::Initialize(args, argv);  // ice组件初始化工作


             // 创建代理适配器,一个ic组件可以有多个代理适配器

             // PrinterAdapterPrx作为代理适配器的名称,可以自由定义,但是一个ic组件下的代理适配器名称必须唯一

             // default -p 10000  代理适配器监听端口配置,端口必须唯一

             Ice::ObjectAdapterPrx oAdapterPrx = ic->createObjectAdatperWithEndpoints("PrinterAdapterPrx", "default -p 10000");

            

             // 创建服务

             Ice::ObjectPtr  oServant = new PrinterImpl();


             // 代理适配器管理服务

            //  PrinterServant为服务的名称,一个代理适配器下可以管理多个服务

            // 同一个代理适配器下的多个服务名称必须唯一

            oAdapterPrx->add(oServant,  ic->stringToIdentity("PrinterServant"));


           // 激活代理适配器

          oAdapterPrx->activate();

        

          // 主线程等待客户请求

          ic->waitForShutdown();

        }

       catch(Ice::LocalException &ex)

       {

            std::cout << ex.ice_name();

       }


      if (NULL != ic)

       {

              // 关闭组件

              ic->destroy();

       }

  }




猜你喜欢

转载自blog.csdn.net/jinghuashuiyue06/article/details/52414643
今日推荐