서버 통신을 위한 WWW 호출 인터페이스를 작성해보자.
필요한 클래스에 매번 함수를 작성하는 것보단 인터페이스를 만들고 상속해서 사용하는 것이 편리하다. GET과 POST용 함수를 따로 작성했는데 POST를 이용한 통신에서는 form에 필요한 데이터를 넣어주는 로직이 추가 되었다.
응답으로 받은 데이터를 어떻게 파싱할 것인지(parser), 호출 성공시 어떤 콜백을 실행할 것인지(onSuccess), 호출 실패 시 어떤 콜백을 실행할 것인지(onFailure) 매번 지정할 수 있으며, 따라서 깔끔하고 가독성 높은 코드 작성이 가능해진다.
public void GET<T>(string url, Func<string, T> parser, Action<T> onSuccess, Action<string> onFailure)
{
StartCoroutine(GETImpl(url, parser, onSuccess, onFailure));
}
public IEnumerator GETImpl<T>(string url, Func<string, T> parser, Action<T> onSuccess, Action<string> onFailure)
{
var www = new WWW(url);
yield return www;
if (null == www.error)
{
var parsedResult = parser(www.text);
onSuccess(parsedResult);
}
else
{
onFailure("WWW Call Error.");
}
}
public void POST<T>(string url, Func<string, T> parser, Action<T> onSuccess, Action<string> onFailure, Dictionary<string, string> post)
{
StartCoroutine(POSTImpl(url, parser, onSuccess, onFailure, post));
}
public IEnumerator POSTImpl<T>(string url, Func<string, T> parser, Action<T> onSuccess, Action<string> onFailure, Dictionary<string, string> post)
{
WWWForm form = new WWWForm();
foreach (KeyValuePair<String, String> post_arg in post)
{
form.AddField(post_arg.Key, post_arg.Value);
}
var www = new WWW(url, form);
yield return www;
if (null == www.error)
{
var parsedResult = parser(www.text);
onSuccess(parsedResult);
}
else
{
onFailure("WWW Call Error");
}
}
'게임 개발 > Unity3D' 카테고리의 다른 글
[Unity | 유니티] 특정 디렉토리에서 프리팹 또는 파일 로드하기 (0) | 2018.11.15 |
---|---|
[Unity | 유니티] EasingFunctions.cs 스크립트 작성하기 (0) | 2018.11.15 |
[Unity | 유니티] 유니티 프로젝트 빌드 시 android sdk path 에러 해결방법 (1) | 2018.02.23 |
[Unity | 유니티] 플랫포머 무한 스크롤 배경 만들기 (2) | 2017.06.13 |
[Unity | 유니티] 구글플레이 연동을 위한 GooglePlayMgr 스크립트 작성하기 (0) | 2017.06.13 |