Photon에는 WebRPC라 불리는 클라이언트 측에서 외부 API를 호출하는 기능이 있습니다.
이러한 기능을 활용함으로써 Photon은 외부 서비스와 연계할 수 있습니다.
예를 들면, 외부에 있는 룸 목록의 취득 등도 WebRPC를 사용함으로써 실현이 가능합니다.
이번에는 WebRPC의 가장 간단한 사용법에 대해서 설명드리겠습니다.
관리화면의 설정
WebRPC의 기능은 기사 집필 시점에서는 Photon Realtime에서 제공되고 있습니다.
기사 집필 시점에서는 Photon Chat에서는 이용할 수 없으니 양해 바랍니다.
WebRPC는 HTTP 베이스의 서버 사이드 어플리케이션을 사전에 구현해 둘 필요가 있습니다.
여기서 만든 서버 사이드 어플리케이션은 Photon Realtime 관리화면에서 설정합니다.
설정 방법은 Photon Realtime의 관리화면에 로그인 후, 어플리케이션을 작성합니다.
작성이 끝나면 다음과 같은 화면이 표시되므로 [상세 확인] 버튼을 클릭해주세요.
어플리케이션의 상세 정보가 표시됩니다. 화면의 아래부분의 Webhooks를 클릭합니다.
신규로 추가하는 경우는 아래의 [새 웹훅 작성] 버튼을 클릭합니다.
Photon클라이언트 어플리케이션이 접속하는 외부 URL의 설정은 이 화면에서 실시합니다.
Configuration의 BaseUrl에는 WebRPC에서 사용할 URL을 지정합니다.
예를 들어 WebRPC에서 이용하는 URL이 "http://photon-tb.webscript.io/webhook"의 경우라면,
BaseUrl에는 "http://photon-tb.webscript.io/"로 지정합니다.
소켓이 될 어플리케이션 작성
WebRPC를 사용해서 Photon에서 실제로 Web어플리케이션을 불러내기 전에 소켓이 될 Web 측의 어플리케이션을 만듭니다.
이번에는 간단하게 소켓을 만들기 위해서 webscript.io라는 서비스를 이용하겠습니다.
https://www.webscript.io/
webscript.io란 브라우저상에서 프로그램을 기입하고 바로 실행 가능한 Web서비스입니다.
스크립트는 7일밖에 유지되지 않지만, 간단한 테스트를 하고 싶을 때 이용하시면 편리합니다.
리퀘스트를 받아서 돌려주는 것만의 간단한 스크립트를 아래와 같이 만들어 보았습니다.
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을 사용한 설명입니다.
관리화면에서 설정한 Webhook의 URL을 호출하기 위해서는 "PhotonNetwork.WebRpc()"을 사용합니다.
이용 방법은 PhotonNetwork.WebRpc()의 제1 인수에 관리화면에서 지정한 BaseURL 이후의 URL을 지정합니다.
예를 들면 "http://photon-tb.webscript.io/webhook"의 경우는 BaseURL에 "http://photon-tb.webscript.io/"로 설정이 끝났으므로
제1 인수에는 "webhook"과 string 문자열로 지정합니다.
다음으로 제2 인수에서는 POST 시의 리퀘스트 파라미터를 설정합니다. 파라미터의 형식은 Dictionary 형입니다.
제2 인수의 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("WebRPC에 실패했습니다. 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가 0으로 되돌아 옵니다.
10번째 줄에서 받은 응답을 WebRPC의 결과를 읽어 내기 위한 WebRpcResponse의 클래스로 인스턴스를 생성합니다. 이 형식으로 응답으로 돌아온 데이터를 이용할 수 있습니다.
11번째 줄에서 WebRPC의 응답이 바른지 판정합니다.
WebRpcResponse 클래스의 Parameters변수에 Dictionary형식으로 응답의 데이터가 저장됩니다.
나중에 Key-Value형식으로 취득해 string문자열로 이용할 수 있습니다.
마지막으로
이처럼 Photon은 의외로 알려지지 않은 다양한 기능이 있습니다.
앞으로도 계속해서 소개 드릴 예정입니다. 많이 기대해 주세요!
댓글
댓글 0개
댓글을 남기려면 로그인하세요.