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 :: Proxy CalcC2SProxy;
3. c->AttachProxy(&CalcC2SProxy);
4. CalcS2C::StubFunctional CalcS2CStub;
5. c->AttachStub(&CalcS2CStub);
6.
7.
8. [C#]
9. CalcC2S.Proxy CalcC2SProxy;
10. c.AttachProxy(CalcC2SProxy);
11. CalcS2C.StubFunctional CalcS2CStub;
12. c.AttachStub(CalcS2CStub);
連接服務器添加登陸功能。
首先,為登陸PIDL檔案宣告RMI函式,然后向客戶端發送登陸請求,服務器處理后進行發出應答,客戶端接受后顯示結果。代碼如下
1. global CalcC2S
2. {
3. RequestLogin([in] string id, [in] string password);
4. }
5.
6. global CalcS2C
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函式,即可呼叫該函式。
uj5u.com熱心網友回復:
ProudNet是研究游戲軟體開發的游戲服務端 &網路引擎。uj5u.com熱心網友回復:
十一假期最后一天 好好宅在家里玩游戲uj5u.com熱心網友回復:
難以想象今天才周一。。。。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/67502.html
標籤:其它游戲引擎
上一篇:北漂程式員,揚帆起航的地方
