ICE的服务器对象实现「建议收藏」

ICE的服务器对象实现「建议收藏」1、需要增加一个类继承至生成的接口类,并实现接口类的虚方法。2、创建实现类的对象3、调用adpater的add方法将创建的对象绑定到adapter中,并传入一个全局唯一标示符,该唯一标示可以通过如下方法生成:  adapter->add(hello,communicator()->stringToIdentity(“hello”));  adapter->addWithUUI

大家好,又见面了,我是你们的朋友全栈君。1、需要增加一个类继承至生成的接口类,并实现接口类的虚方法。

2、创建实现类的对象

3、调用adpater的add方法将创建的对象绑定到adapter中,并传入一个全局唯一标示符,该唯一标示可以通过如下方法生成:

   adapter->add(hello, communicator()->stringToIdentity(“hello”));

   adapter->addWithUUID(hello);

   Ice::Ideentity id; id.name=”hello”; adapter->add(hello, id);

4、adapter的add和addWithUUID方法返回一个代理对象,可以将该代理对象返回给客户端让其调用代理的方法

5、在实现接口的操作方法时,在每个操作的最后一个参数都会被ice映射成const Current& current,可以通过该成员获取操作调用上下文信息

   Current的定义如下:

   module Ice 

   {

        local dictionary<string, string> Context;

        enum OperationMode { Normal, \Idempotent };

        local struct Current 


   {

            ObjectAdapter adapter;    // 服务器的对象适配器,可以通过它再调用getCommunicator得到通信器


           Connection con;           // 连接对象

            Identity id;              // 服务对象标示

            string facet;             // 

            string operation;         // 操作的名称

            OperationMode mode;       // 操作模式

            Context ctx;              // 操作上下文属性


            int requestId;            // 请求ID

        };

    };

6、服务器端接收到请求后会自动的分派请求给正确的服务对象,因为在请求中携带了对象标示。在分派给服务对象前,可以设置拦截器,具体操作如下:
   adapter->add(hello, communicator()->stringToIdentity(“hello”));
   该处不添加hello这个servant,取而代之的是设置一个DispatchInterceptor
   class MyDipatchInterceptor : public Ice::DispatchInterceptor
   {

   public:
       MyDipatchInterceptor(const MyServantIPtr& servant) : _servant(servant)
  {

  
  }
  
       virtual DispatchStatus dispatch(Request& request)
       {

            return _servant->dispatch(request);
       }
private:
  const MyServantIPtr& _servant;
   };
   adapter->add(new MyDipatchInterceptor(hello), communicator()->stringToIdentity(“hello”));

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140697.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • yuicompressor java_使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件

    yuicompressor java_使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件###引入Maven依赖“`htmlcom.yahoo.platform.yuiyuicompressor2.4.8“`Java代码“`javapackagecom.itshidu.jeelite.common.web;importcom.itshidu.jeelite.common.util.Compres…

    2022年7月18日
    6
  • 2000数据库置疑怎么处理_msdb数据库置疑的解决方法

    2000数据库置疑怎么处理_msdb数据库置疑的解决方法由于服务器意外的断电,导致SQLSERVER服务器上数据库出现“置疑”而无法使用,通过网上搜索,找到以下方法解决问题,这里记录一下:产生数据库置疑的时侯,数据库文件和日志文件都是存在的,如果数据库文件都不存在了,则要另当处理。1、停止数据库服务器,将数据库MDF文件和LDF文件复制备份一份2、启动数据库服务器,删除置疑的数据库3、仅用备份的数据库MDF文件附加数据库,sp_attach_…

    2022年8月20日
    6
  • Cmake的使用

    Cmake的使用vscodeCmake简介Cmake语法重要指令和CMake常用变量重要指令CMake常用变量CMake编译工程CMake代码实践CMake完整项目调试步骤launch.json和tasks.jsonCmake简介简介CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。CMake可以说已经成为大部分C++开源项目标配传统的C++文件不通系统对应不通的编译比如 当添加一个文件的时候需要对不通操作系统中的工程进行修改有了Cmake以后,只需要编写

    2022年8月9日
    0
  • 两位数活多位乘法的计算编程

    两位数活多位乘法的计算编程代码编写;OptionBase1PrivateSubCommand1_Click()DimMAsStringDimNAsStringM=Trim(Text1.Text)N=Trim(Text2.Text)DimNumber1()AsByteDimNumber2()AsByteReDimNumber1(Len(M))R

    2022年5月6日
    38
  • Vue Element入门教程

    Vue Element入门教程之前的文章已经为大家讲解了如何搭建VueElement框架,接下来教大家试着自己编写一个自己的页面。这个页面所对应的代码,为src目录下的App.vue文件,我们先把显示图片和按钮这几行行注释掉。注意:不能注释掉&amp;lt;router-view&amp;gt;&amp;lt;/router-view&amp;gt;这一行。&amp;lt;template&amp;gt;&amp;lt;!–&amp;lt;imgs

    2022年5月11日
    42
  • django分页器的用法_佳能分页器使用

    django分页器的用法_佳能分页器使用前言当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面PageNumberPagination:基础分页器,性能略差LimitOffsetP

    2022年8月7日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号