您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 3浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Ice笔记---异步程序设计demo

phymat.nico 发布时间:2018-01-19 20:17:16 ,浏览量:3

最近学习了异步通信这一章:异步包括服务端的异步分派(AMD)以及客户端的异步调用(AMI)。

下面介绍一下如何实现简单的异步通信(主要实现了客户端的异步调用,AMD暂未体现):

 

 1.首先编写Ice文件:Demo.ice

[cpp] view plain copy
  1. module Demo{  
  2.     interface Employee{  
  3.           ["amd"]void add(int a, int b, out int sum);  
  4.     };  
  5. };  

     ["amd"]表示的是元数据,指定服务器端将提供异步分派的方法函数。该add函数中有两个in参数;一个out参数,作为回传参数。

 

2.映射到C++代码:使用命令 slice2cpp Demo.ice

   经过映射之后,程序将生成Demo.h与Demo.cpp文件,如下面部分代码所示Demo.h

[cpp] view plain copy
  1. // ....More code before  
  2. namespace Demo  
  3. {  
  4.   
  5. class Employee : virtual public ::Ice::Object  
  6. {  
  7. public:  
  8.   
  9.     typedef EmployeePrx ProxyType;  
  10.     typedef EmployeePtr PointerType;  
  11.       
  12.     virtual ::Ice::ObjectPtr ice_clone() const;  
  13.   
  14.     virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::Current()) const;  
  15.     virtual ::std::vector ice_ids(const ::Ice::Current& = ::Ice::Current()) const;  
  16.     virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::Current()) const;  
  17.     static const ::std::string& ice_staticId();  
  18.   
  19.     virtual void add_async(const ::Demo::AMD_Employee_addPtr&, ::Ice::Int, ::Ice::Int, const ::Ice::Current& = ::Ice::Current()) = 0;  
  20.     // ... More code here  
  21.       
  22. };  
  23. // ...  

 

3. 实现服务端程序

    新建Server.cpp文件,将Demo.h中的虚方法add_async()实现。并新建servant类来继承Ice::application类,初始化Ice run time ,同时将servant注册到对象适配器中去。

   

[cpp] view plain copy
  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. using namespace std;  
  6. using namespace Demo;  
  7.   
  8. class Manager : virtual public Employee,public IceUtil::Monitor  
  9. {  
  10. public:  
  11.     Manager():_sum(0){}  
  12. ~Manager(){}  
  13.   
  14.     virtual void add_async(const ::Demo::AMD_Employee_addPtr& add_ptr, int a, int b, const ::Ice::Current& =::Ice::Current())  
  15.     {  
  16.         _sum = a+b;  
  17.         sleep(1);  
  18.           
  19.         cout
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0460s