监控安装 ERP

系统集成论坛

 找回密码
 注册通行证

QQ登录

只需一步,快速开始

路由器交换机防火墙系统集成商城 优质产品采购平台
查看: 1698|回复: 20
打印 上一主题 下一主题

ProudNet 使用方法#4:RMI

[复制链接]

2

主题

38

帖子

79

积分

实习生

跳转到指定楼层
1
发表于 2016-10-5 17:16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
华为金牌代理
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代表已加密方式发送。为了防止黑客而创建的用户名和密码。
总结:
1.PIDL文件定义RMI函数
2.编译,并且构建配置。
3.将生成的 Proxy, Stub附加至 NetClient和NetServer。
4.调用生成的Proxy函数,即可发送信息。
5. 附加生成的Stub函数,即可调用该函数。

2

主题

38

帖子

79

积分

实习生

2
 楼主| 发表于 2016-10-6 10:38:49 | 只看该作者
华为金牌代理
ProudNet是研究游戏软件开发的游戏服务端 &网络引擎。

2

主题

38

帖子

79

积分

实习生

3
 楼主| 发表于 2016-10-7 11:35:31 | 只看该作者
华为金牌代理
十一假期最后一天 好好宅在家里玩游戏

2

主题

38

帖子

79

积分

实习生

4
 楼主| 发表于 2016-10-10 13:23:46 | 只看该作者
难以想象今天才周一。。。。。。

2

主题

38

帖子

79

积分

实习生

5
 楼主| 发表于 2016-10-11 11:44:41 | 只看该作者
希望对这方面感兴趣的人有所帮助

2

主题

38

帖子

79

积分

实习生

6
 楼主| 发表于 2016-10-12 11:25:54 | 只看该作者
lz不易,还请大家多多关照

2

主题

38

帖子

79

积分

实习生

7
 楼主| 发表于 2016-10-13 11:34:36 | 只看该作者
感谢这个lt给大家提供这么好的交流平台

2

主题

38

帖子

79

积分

实习生

8
 楼主| 发表于 2016-10-14 10:42:34 | 只看该作者
看见函数 我都不知道该怎么形容了

0

主题

0

帖子

2

积分

实习生

9
发表于 2016-10-14 14:48:42 | 只看该作者

服务器配置  长期租用 提供7*24h优质服务,质量有保证
公司网站:http://222.186.34.2/
淘宝号https://shop61032865.taobao.com/     https://leizy2010.taobao.com/
值班电话:17321613717             企鹅号:869771610
  

2

主题

38

帖子

79

积分

实习生

10
 楼主| 发表于 2016-10-17 11:22:40 | 只看该作者
貌似和电脑有些关系的我都没什么天赋
您需要登录后才可以回帖 登录 | 注册通行证

本版积分规则

联系我们| 手机版|系统集成论坛 ( 京ICP备11008917号 )

GMT+8, 2024-11-26 01:52 , Processed in 0.135449 second(s), 22 queries .

系统集成论坛

BBS.XTJC.COM

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