Photon中有個功能為WebRPC,可從用戶端叫用第三方外部的API。活用此一功能,Photon 可與外部服務一同合作。
例如,經由使用WebRPC,即可取得外部的房間清單。這裡將針對WebRPC以最簡單的使用方法進行說明。
Photon Turnbased 是2014年6月開始的全新服務,除了Photon Realtime的功能之外,它還新增了WebHook/WebRPC雲端儲存的功能。每1房間的訊息數上限雖然較低,但可以用比Photon Realtime更為便宜的價格取得。
詳細內容請參考Photon Turnbased官方網站:
https://www.photonengine.com/ja/Turnbased
儀錶板(Dashboard)的設定
在開始撰寫這篇文章時,WebRPC的功能是由Photon Realtime / Photon Turnbased 提供。同時,在開始撰寫這篇文章時,尚無法在Photon Chat中使用,敬請見諒。
要使用WebRPC,必須事先安裝好以HTTP基礎的伺服器端應用程式。此處製作的伺服器端應用程式,將以Photon Turnbased 儀表板進行設定。
設定方法是,登入 Photon Turnbased 的儀表板後,建立應用程式。製作完畢之後,將會顯示如下的畫面,請點擊右方的 [確認詳細內容]。
將會顯示應用程式的詳細資訊。請點擊其中的Webhook。如欲新增,則點擊下方的[Webhook] 按鍵。
可在此一畫面設定Photon 的用戶應用程式所要連接的外部URL。請在Configuration的BaseUrl中,指定WebRPC要使用的URL。
例如,WebRPC使用的URL是 “http://photon-tb.webscript.io/webhook” 的話、BaseUrl就指定為 “http://photon-tb.webscript.io/” 。
建立接收端的應用程式
實際使用 Photon叫出Web應用程式的WebRPC功能之前,先來建立擔任接收端的Web端應用程式吧。
這次將使用webscript.io 服務來製作簡單的接收端。
https://www.webscript.io/
webscript.io是一個可直接在瀏覽器上寫程式,並且立即可以執行的網路服務。程式腳本只會保存7天,可以很方便的進行簡單的測試。在這裡我們先簡述webscript.io 至此, 以保篇幅的簡潔。
這裡嘗試寫了一段簡單的腳本,是在接收要求後予以回覆。程式內容很單純,是以JSON格式傳出,再以name與age的參數回覆。
local jsonRequest = json.parse(request.body) local _name = jsonRequest.name local _age = jsonRequest.age if _name ~= nil and _age ~= nil then return { ResultCode = 0, Data = { name = _name, age = _age } } else return { ResultCode = 9 } end
使用WebRPC從用戶端發出請求
從用戶端叫出以webscript.io製作的程式。此次的用戶端將使用PUN來進行說明。
使用 “PhotonNetwork.WebRpc()”,叫出在儀表板上設定的Webhook的URL。使用方法是在PhotonNetwork.WebRpc()的第一個參數中,針對儀表板中已指定的BaseURL之後的URL進行指定。
例如“http://photon-tb.webscript.io/webhook” 時,BaseURL中的 “http://photon-tb.webscript.io/” 因為已經完成設定,所以第一個參數中,用string字串設定為 “webhook”。
其次,在第二個參數中,設定POST時的請求參數,參數的型態為 Dictionary型態。第二個參數的Dictionary將會轉換成JSON形式,並被 POST出來。
程式範例如下。
using System.Collections.Generic;
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add ("name", "Niko Yazawa");
parameters.Add ("age", "17");
PhotonNetwork.WebRpc ("webhook", parameters);
使用WebRPC從用戶端接收回覆
接受WebRPC 的回覆時,可使用 OnWebRpcResponse 函式。如欲使用此一函式,必須要建立承 Photon.MonoBehaviour 的類別。OnWebRpcResponse 是當RPC的回覆傳回時被叫出的函式。
接下來就實際操作看看!
using ExitGames.Client.Photon; void OnWebRpcResponse(OperationResponse operationResponse) { if (operationResponse.ReturnCode != 0) { Debug.Log("WebPRC失敗. Response: " + operationResponse.ToStringFull()); return; } WebRpcResponse webRpcResponse = new WebRpcResponse (operationResponse); if (webRpcResponse.ReturnCode != 0) { Debug.Log("WebRPC '" + webRpcResponse.Name + "' 失敗. Error: " + webRpcResponse.ReturnCode + " Message: " + webRpcResponse.DebugMessage); return; } Dictionary<string, object> parameters = webRpcResponse.Parameters; foreach (KeyValuePair<string, object> pair in parameters) { Debug.Log(string.Format("Key : {0} / Value : {1}", pair.Key, pair.Value)); } }
以第5行來判斷回覆是否正確傳回。如果回覆已正常傳回,OperationResponse 的 ReturnCode 將會傳回 。
在第10行,為了從接收的回覆中解讀WebRPC的結果,將會用WebRpcResponse的類別以回覆來生成實體。 採用這個資料型別,即可使用回覆中所傳回的數據。
利用第11行來判斷WebRPC 是否正確。回覆的數據將會以Dictionary 的型別,保存於WebRpcResponse 類別的Parameters 變數中。之後可以Key-Value形式取得,並可作為string字串使用。
。
小結
Photon裡頭有許多像這些較不為人知而且又很彈性的功能,之後還會繼續進行介紹,敬請期待!
評論
0 條評論
請登入寫評論。