大余论坛

 找回密码
 注册成为会员

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 824|回复: 17

[电脑网络] ProudNet 使用方法#4:RMI

[复制链接]
发表于 2016-10-10 15:26:57 | 显示全部楼层 |阅读模式
广告招租

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有帐号?注册成为会员

x
ProudNet是研究游戏软件开发的游戏服务端 &网络引擎。

利用SendUserMessage发送2进制数据 ,在接收端 OnReceiveUserMessage存在手动接收数据的麻烦性。
而使用ProudNet 的RMI功能这一切将变得很方便。RMI可以远程调用函数, 通过对方计算机程序中的特定函数进行远程控制。
就像开发计算机程序,客户端发送给服务器两个值后服务器将求和结果发送给客户端的方式。
定义这些函数,以下代码为定义RMI函数。
1.  global CalcC2S  
2.  {  
3.     RequestAdd([in] int a, [in] int b);  
4.  }  
5.   
6.  global CalcS2C  
7.  {  
8.      ReponseAdd([in] int sum);  
9.  }  

3行,8行代表信息格式化。
以下代码是客户端发信息到服务端的过程。
1.  [C++]  
2.   
3.  CalcC2SProxy.RequestAdd(HostID_Server,RmiContext::ReliableSend,3, 4);  
4.   
5.   
6.   
7.  [C#]  
8.  CalcC2SProxy.RequestAdd(HostID.Server,RmiContext.ReliableSend,3, 4);  

对CalcC2S, CalcS2C的下一章做详细介绍。首先, RequestAdd第一个因素是 “发送给谁”,加入HostID.Server 为发送给服务器。其次,“如何发送”。之前介绍过的RmiContex,然后其他因素是之前RMI定义过的因素。
以上为发送信息的过程。
以下代码为,服务器处理从客户端接收到的信息过程。
1.  [C++]  
2.  CalcC2SStub.RequestAdd_Function=[...]PARAM_CalcC2SStub_RequestAdd {   // [1]
3.      int sum= a + b;  // [2]
4.     CalcS2CProxy.ResponseAdd(remote, RmiContext::ReliableSend,sum);  // [3]
5.  };  
6.   
7.   
8.  [C#]   
9.  CalcC2SStub.RequestAdd =(remote, rmiContext, a, b) {  // [1]
10.     int sum= a + b;  // [2]
11.    CalcS2CProxy.ResponseAdd(remote, RmiContext.ReliableSend,sum);  // [3]
12. };

[1]:客户端发送信息,从远程调用的RequestAdd运行时,加入Lambda表达式的部分。[…]包含了Lambda表达式。
[2]:两个值进行相加。
[3]:服务器远程调用客户端函数。服务器发送给客户端两个值的计算结果。Remote则代表了收信时,发信者的 HostID。
以下代码为,客户端处理接收的信息。
1.  [C++]  
2.  CalcS2CStub.ResponseAdd_Function=[...]PARAM_CalcS2CStub_ResponseAdd {  
3.     print(sum);
4.  };  
5.  
6.  
7.  [C#]  
8.  CalcS2CStub.ResponseAdd =(remote, rmiContext, sum) {  
9.     print(sum);
10. };

以上为全部处理过程。如需要添加更多种类的初始化信息,可以添加定义到RMI函数部分。如想要变更格式化信息时只需修改RMI函数定义的参数。游戏开发过程对上万种信息种类处理将变得容易。
将定义的RMI信息添加到.pid文件,然后再添加至Calc.pid文件中。
然后利用PIDL complier 生成发送和接收信息代码。详细参考链接 guide.nettention.com/cpp_zh
(参考:在linux ProudNet 环境下同样使用PIDL compiler运行)
PIDL complier 生成发信规则和收信规则,发信规则proxy ,收信规则stub.生成 PIDL complier的语言有C++,c#,Java和Unreal Script).
CalcS2CProxy,和CalcS2CStub 进行介绍:
PIDL文件中定义的 CalcC2S, CalcS2C 是RMI函数集合, PIDL compiler 编译后生成以下类。
CalcC2S.Proxy
CalcC2S.Stub
CalcS2C.Proxy
CalcS2C.Stub

分别代表
CalcC2S.Proxy :客户端->服务端的发信类 即,proxy
CalcC2S.Stub : 客户端->服务端的收信类 即,stub
CalcS2C.Proxy:服务端->客户端的发信类 即,proxy
CalcS2C.Stub: 服务端->客户端的收信类 即,stub

客户端只考虑CalcC2S.Proxy和 CalcS2C.Stub,服务端考虑其它所有。
PIDL compiler 生成的类附加至 NetClient和NetServer。附加方式如下。
1.创建类实例。
2.创建的实例用  AttachProxy,AttachStub函数附加。
以下为附加到客户端的代码。
1.  [C++]  
2.  CalcC2S :: ProxyCalcC2SProxy;  
3.  c->AttachProxy(&CalcC2SProxy);  
4.  CalcS2C::StubFunctionalCalcS2CStub;  
5.  c->AttachStub(&CalcS2CStub);  
6.   
7.   
8.  [C#]  
9.  CalcC2S.ProxyCalcC2SProxy;  
10.c.AttachProxy(CalcC2SProxy);  
11. CalcS2C.StubFunctionalCalcS2CStub;  
12.c.AttachStub(CalcS2CStub);  

连接服务器添加登陆功能。
首先,为登陆PIDL文件声明RMI函数,然后向客户端发送登陆请求,服务器处理后进行发出应答,客户端接受后显示结果。代码如下
1.  globalCalcC2S  
2.  {  
3.     RequestLogin([in] string id, [in] string password);  
4.  }  
5.  
6.  globalCalcS2C  
7.  {  
8.     ResponseLogin([in] bool success);  
9.  }  
10.  
11.  
12.[C++]  
13.CalcC2SProxy.RequestLogin(HostID_Server, RmiContext::SecureReliableSend,"john", "marine");  
14.   
15. CalcC2SStub.RequestLogin_Function =[...]PARAM_CalcC2SStub_RequestLogin {  
16.     bool s= false;  
17.     if(id== ... && password == ...)  
18.     {  
19.        s = true;  
20.     }  
21.      
22.    CalcS2CProxy.ResponseLogin(remote, RmiContext::ReliableSend,s);  
23. };  
24.   
25. CalcS2CStub.ResponseLogin_Function =[...]PARAM_CalcS2CStub_ResponseLogin {  
26.    print(success);  
27. };  
28.   
29.   
30. [C#]  
31.CalcC2SProxy.RequestLogin(HostID.Server, RmiContext.SecureReliableSend,"john", "marine");  
32.   
33. CalcC2SStub.RequestLogin = (remote,rmiContext, id, password) => {  
34.     bool s= false;  
35.     if(id== ... && password == ...)  
36.     {  
37.        s = true;  
38.     }  
39.      
40.     CalcS2CProxy.ResponseLogin(remote,RmiContext.ReliableSend, s);  
41. };  
42.   
43. CalcS2CStub.ResponseLogin = (remote,rmiContext, success) {  
44.    print(success);  
45. };  

13行 SecureReliableSend代表已加密方式发送。为了防止黑l客而创建的用户名和密码。

总结:
1.PIDL文件定义RMI函数
2.编译,并且构建配置。
3.将生成的 Proxy, Stub附加至 NetClient和NetServer。
4.调用生成的Proxy函数,即可发送信息。
5. 附加生成的Stub函数,即可调用该函数。

 楼主| 发表于 2016-10-10 15:33:03 | 显示全部楼层
ProudNet是研究游戏软件开发的游戏服务端 &网络引擎。
回复 支持 反对

使用道具 举报

发表于 2016-10-11 07:52:57 | 显示全部楼层
大余新娘跟妆化妆服务
不懂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-11 11:43:49 | 显示全部楼层
大余论坛版主招募
希望对这方面感兴趣的人有所帮助
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-12 11:25:52 | 显示全部楼层
广告招租
lz不易,还请大家多多关照
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-13 11:33:38 | 显示全部楼层
大余论坛版主招募
感谢这个lt给大家提供这么好的交流平台
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-14 10:42:17 | 显示全部楼层
广告招租
看见函数 我都不知道该怎么形容了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-17 11:23:32 | 显示全部楼层
大余论坛版主招募
貌似和电脑有些关系的我都没什么天赋
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-18 10:59:35 | 显示全部楼层
广告招租
ProudNet对于无线网络环境下实时游戏具有显著的优势。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-19 09:23:38 | 显示全部楼层
大余论坛版主招募
把看帖回帖的美德发扬光大 嘻嘻
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-20 09:35:22 | 显示全部楼层
广告招租
希望对这方面感兴趣的人有所帮助
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-21 11:03:49 | 显示全部楼层
广告招租
还好我有朋友懂 一起研究下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-24 11:22:10 | 显示全部楼层
大余论坛版主招募
早知道这样,就好好学习了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-25 14:27:27 | 显示全部楼层
大余论坛版主招募
游戏开发神马的不是太懂 玩游戏倒是会
回复 支持 反对

使用道具 举报

发表于 2016-10-26 10:42:33 | 显示全部楼层
大余论坛版主招募
希望对游戏开发的人有所帮助
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 11:20:06 | 显示全部楼层
广告招租
明白的朋友举手?、、、、、、
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-28 12:07:05 | 显示全部楼层
大余论坛版主招募
ProudNet是研究游戏软件开发的游戏服务端 &网络引擎。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-31 14:03:15 | 显示全部楼层
广告招租
希望对这方面感兴趣的人有所帮助
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则

QQ|站长信箱|文字版|手机版|赣公网安备 36072302000007号|大余在线 ( 粤ICP备05040644号

GMT+8, 2018-1-23 00:08

Powered by Discuz! X3.2

© 2004-2015 DayuOnline.Com

快速回复 返回顶部 返回列表