유니티(unity)
[unity/Webapi] Get/Post 요청하기 직접만든 Helper 함수 소스 제공
개발자 고포고
2021. 12. 6. 21:51
반응형
public class WebAPIHelper
{
//이벤트 리턴값 받을 생성
public delegate void ReceiveEventHandler(object obj);
public event ReceiveEventHandler ReceiveEventHandlerEvent;
//Singleton을 활용하여 1개의 인스턴스 유지 및 접근 효율성 증가
private static WebAPIHelper _instance { get; set; }
public static WebAPIHelper Instance
{
get
{
return _instance ?? (_instance = new WebAPIHelper());
}
}
//Get 함수 제네릭 타입을 활용하여 다양한 타입 리턴값 대응
public IEnumerator Get<T>(string uri, string prameter = "")
{
using (UnityWebRequest request = UnityWebRequest.Get($"{SettingsInfo.WEBSERVICE_HOST}/{uri}/{prameter}"))
{
yield return request.SendWebRequest();
try
{
var jsonString = request.downloadHandler.text;
//json 객체로 변환
var dataObj = JsonConvert.DeserializeObject<T>(jsonString);
//이벤트로 데이터를 보낸다.이벤트 등록한곳에서 받을 수 있게
ReceiveEventHandlerEvent(dataObj);
}
catch (Exception e)
{
}
}
}
public IEnumerator Post(string uri, WWWForm parameter)
{
using (UnityWebRequest request = UnityWebRequest.Post($"{SettingsInfo.WEBSERVICE_HOST}/{uri}", parameter))
{
yield return request.SendWebRequest();
Debug.Log(request.result);
}
}
//Post 함수 Json객체를 활용하여 파라미터를 내보낸다
//핵심은 json 파싱하여 객체로 보내면 json 형식이 깨져버려서 반드시 byte로 변환 후 보내야한다.
// request.uploadHandler와 request.SetRequestHeader이 핵심이다
public IEnumerator Post(string uri, string parameter)
{
using (UnityWebRequest request = UnityWebRequest.Post($"{SettingsInfo.WEBSERVICE_HOST}/{uri}", parameter))
{
byte[] jsonToSend = new UTF8Encoding().GetBytes(parameter);
request.uploadHandler = new UploadHandlerRaw(jsonToSend);
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
Debug.Log(request.result);
request.Dispose();
}
}
//Post 함수 WWWForm 객체를 활용하여 파라미터를 내보낸다
public WWWForm Parameter_beacon(string name, string rssi, string range, string position)
{
WWWForm form = new WWWForm();
form.AddField("code", CommonUtils.GenerateID());
form.AddField("name", name);
form.AddField("position", position);
form.AddField("rssi", rssi);
form.AddField("range", range);
return form;
}
//Post 함수 WWWForm 객체를 활용하여 파라미터를 내보낸다
public WWWForm Parameter_user(string name, string nickName)
{
WWWForm form = new WWWForm();
form.AddField("code", CommonUtils.GenerateID());
form.AddField("name", name);
form.AddField("nickName", nickName);
return form;
}
//Post 함수 WWWForm 객체를 활용하여 파라미터를 내보낸다
public WWWForm Parameter_point(string point, string userCode, string itemCode)
{
WWWForm form = new WWWForm();
form.AddField("userCode", userCode);
form.AddField("point", point);
form.AddField("itemCode", itemCode);
return form;
}
}
#unity #webapihelper #get #post
반응형