项目地址:http://code.google.com/p/febird
目前已经全部完成,并且取得了非常好的效果 。
使用该RPC的简短代码:
//////////////////////////////////////////////////////////////////////////
// sample usage...
// test.h
namespace febird { namespace rpc {
//////////////////////////////////////////////////////////////////////////
// sample usage...
// test.h
class SampleRPC_Interface1 : public remote_object
{
public:
typedef std::vector<var_uint32_t> vint_vec;
BEGIN_RPC_REGISTER_MF(SampleRPC_Interface1)
RPC_REGISTER_MF(get_val)
RPC_REGISTER_MF(get_len)
RPC_REGISTER_MF(squareVec)
RPC_REGISTER_MF(multiVec)
END_RPC_REGISTER_MF()
RPC_DECLARE_MF(get_val, (rpc_in<int> x))
RPC_DECLARE_MF(get_len, (const std::string& x))
RPC_DECLARE_MF(squareVec, (vint_vec& x))
RPC_DECLARE_MF(multiVec, (vint_vec& z, vint_vec& x, vint_vec& y))
#ifdef RPC_CLIENT_SIDE
void printVec(const vint_vec& vec);
#endif
};
class SampleRPC_Interface2 : public remote_object
{
public:
BEGIN_RPC_REGISTER_MF(SampleRPC_Interface2)
RPC_REGISTER_MF(get_val)
RPC_REGISTER_MF(get_len)
END_RPC_REGISTER_MF()
RPC_DECLARE_MF(get_val, (rpc_in<int> x))
RPC_DECLARE_MF(get_len, (const std::string& x))
};
} } // namespace febird::rpc
// server.cpp
// test_rpc_server.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <tlib/rpc/server.h>
#include <tlib/io/SocketStream.h>
#include <iostream>
#include "../test.h"
namespace febird { namespace rpc {
rpc_return_t SampleRPC_Interface1::get_val(rpc_in<int> x)
{
std::cout << "SampleRPC_Interface1::get_val(rpc_in<int> x=" << x.get() << ")\n";
return x.get();
}
rpc_return_t SampleRPC_Interface1::get_len(const std::string& x)
{
std::cout << "SampleRPC_Interface1::get_len(const std::string& x=\"" << x << "\")\n";
return x.size();
}
rpc_return_t SampleRPC_Interface1::squareVec(vint_vec& x)
{
for (vint_vec::iterator i = x.begin(); i != x.end(); ++i)
{
(*i).t *= (*i).t;
}
return x.size();
}
rpc_return_t SampleRPC_Interface1::multiVec(vint_vec& z, vint_vec& x, vint_vec& y)
{
z.clear();
for (int i = 0; i < x.size(); ++i)
{
z.push_back(var_uint32_t(x[i].t * y[i].t));
}
return 123456;
}
rpc_return_t SampleRPC_Interface2::get_val(rpc_in<int> x)
{
std::cout << BOOST_CURRENT_FUNCTION << "x=" << x.get() << "\n";
return x.get();
}
rpc_return_t SampleRPC_Interface2::get_len(const std::string& x)
{
std::cout << BOOST_CURRENT_FUNCTION << "x=" << x << "\n";
return x.size();
}
} } // namespace febird::rpc
using namespace febird;
using namespace febird::rpc;
typedef SocketStream stream_t;
typedef PortableDataInput <BufferedInputStream> input_t;
typedef PortableDataOutput<BufferedOutputStream> output_t;
int main(int argc, char** argv[])
{
#ifdef _WIN32
WSADATA information;
WSAStartup(MAKEWORD(2, 2), &information);
#endif
rpc_server<input_t, output_t, SocketConnection> server;
server.listen("0.0.0.0:8001");
// register rpc implementation class...
项目地址:http://code.google.com/p/febird
分享到:
相关推荐
一个RPC例子,远程调用一个计算阶乘的函数。具体编写过程如下: 1、创建一个.idl文件, 为应用程序的远地函数定义一个接口。(RpcFact.idl文件) 2、应用程序属性配置文件 (RpcFact.acf文件) 3、用MIDL编译器编译...
C++ 11映射试图避免限制ORB开发人员的实现自由。对于每个OMG IDL构造,C++ 11映射解释使用C++ 11的构造的语法和语义。如果客户机或服务器程序使用C++ 11映射子句中所描述的结构,则符合此映射(是C++ 11)。
使用IDL语言实现的图像旋转程序,别的语言也可以借鉴思路
IDL调用ENVI库函数实现非监督分类的代码
多数人不能利用工作中的时间学习IDL,笔者想写一本能满足这两类人学习IDL的书。总之,本书为不喜欢读教科书并能通过例子学得最好的人全面介绍IDL的精髓。本书在IDL编程技术和技巧方面只做了简要概略,而这些技术只能...
遥感:IDL语言实现间接法图像旋转,适合初学者,无斑点噪声
介绍RCP的实现原理 目录 1. 前言 2 2. 基本概念 3 2.1. IDL 3 2.2. 代理(Proxy) 3 2.3. 存根(Stub) 4 3. 三要素 4 3.1. 网络通讯 4 3.2. 消息编解码 5 3.3. IDL编译器 5 4. flex和bison 5 4.1. 准备概念 5 ...
基于IDL和Visual_C++的混合编程,望对大家有一定的用途!
IDL精髓.pdf COM idl C++
IDL实现的主成分分析变换,可以计算相关性矩阵,特征值和特征向量
IDL实现坐标变换的小程序,对平面坐标系进行各种设置与改变,包括改变窗口颜色、一个窗口显示多个坐标系、坐标轴的标题设置、设置坐标轴范围及刻度数、添加注释线、改变注释字号等。
VC++调用IDL的使用案例 有多个IDL和VC相互调用的案例 打包在一个文件夹中
该工程是Tars RPC框架C++语言的源代码 , C++语言框架rpc的源码实现,C++语言框架IDL工具的源码实现 。
对学习IDL有很大的帮助,IDL入门教程一.doc,IDL入门教程二(上)(简单图形显示II).doc,IDL入门教程二(下)(简单图形显示I).doc,IDL入门教程三(上).doc,IDL入门教程三(下).doc,IDL入门教程四(图形显示技术).doc,IDL入门...
图书介绍: CORBA规范是目前最具生命力的跨平台技术,它独立于网络...本书是一本使用C++编写CORBA应用程序的实用指南,适用于大学教师和研究生作为教材或参考书,也可作为从事CORBA技术开发的软件工程师的参考书。
Java调用IDL程序需要通过 IDL bridge来完成这一目的,该文件包括对IDL程序编写的规范格式示范,以及提供了本人编写的参考例子,提到在实现调用IDL过程中出现的一些错误以及解决方法。该资源中的word文件较为详细的...
IDL影像旋转程序
本书向读者提供了IDL的详细描述及如何使用IDL方面的知识,基于示例、由浅入深地阐述了各种IDL构造,并提供了示例C++和VB代码。 本书分为两大部分,共10章。第一部分包括前6章,这部分完整地描述了IDL中的各种构造。...
IDL实现快速大气校正;envi5.3 包括pro文件代码和备份的防止pro格式乱码的txt文件 主要调用ENVITask('QUAC')实现大气校正
适合初学者,很好理解