「Unity/Csharp/Request」の版間の差分
ナビゲーションに移動
検索に移動
| 1行目: | 1行目: | ||
==Httpリクエストサンプル== | ==Httpリクエストサンプル== | ||
以下delegateを使ったhttpリクエストサンプルコード | |||
WebHttpRequest.cs | |||
<pre> | |||
using System.Collections; | |||
using UnityEngine; | |||
using UnityEngine.Networking; | |||
public class WebHttpRequest : MonoBehaviour { | |||
string text = ""; | |||
public bool errorFlag = false; | |||
public enum ResponseType | |||
{ | |||
Success, | |||
Faild, | |||
NetworkError | |||
} | |||
public delegate void CustomCallback(ResponseType responseType); | |||
private CustomCallback callbacks; | |||
public void addCallback(CustomCallback callback) | |||
{ | |||
callbacks += callback; | |||
} | |||
public void Exec (string url) { | |||
text = ""; | |||
errorFlag = false; | |||
StartCoroutine(Get (url)); | |||
} | |||
public IEnumerator Get (string url) { | |||
var request = new UnityWebRequest(); | |||
request.downloadHandler = new DownloadHandlerBuffer(); | |||
request.url = url; | |||
request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8"); | |||
request.method = UnityWebRequest.kHttpVerbGET; | |||
yield return request.Send(); | |||
if (request.isNetworkError) { | |||
errorFlag = true; | |||
callbacks(ResponseType.NetworkError); | |||
} else { | |||
if (request.responseCode == 200) { | |||
text = request.downloadHandler.text; | |||
callbacks(ResponseType.Success); | |||
} else { | |||
errorFlag = true; | |||
callbacks(ResponseType.Faild); | |||
} | |||
} | |||
} | |||
public string GetBody() { | |||
return text; | |||
} | |||
public void Reset() { | |||
text = ""; | |||
errorFlag = false; | |||
} | |||
} | |||
</pre> | |||
呼び出し元 | |||
NewBehaviourScript.cs | |||
<pre> | |||
public class NewBehaviourScript : MonoBehaviour { | |||
WebHttpRequest request; | |||
// http送信 | |||
void Start () { | |||
const string uri = "http://raw.githubusercontent.com/nlohmann/json/develop/test/data/json.org/1.json"; | |||
string param1 = "value1"; | |||
param1 = WWW.EscapeURL(param1); | |||
string query = "?hoge=" + param1; | |||
string url = uri + query; | |||
GameObject gameObj = new GameObject(); | |||
request = gameObj.AddComponent<WebHttpRequest>(); | |||
request.Exec(url); | |||
request.addCallback(OnResponse); | |||
Debug.Log("request=" + url); | |||
} | |||
// httpのresponse受信 | |||
public void OnResponse(WebHttpRequest.ResponseType responseType) | |||
{ | |||
Debug.Log("onResponse=" + responseType); | |||
if (request) | |||
{ | |||
if (responseType.Equals(WebHttpRequest.ResponseType.Success)) | |||
{ | |||
Debug.Log("body=" + request.GetBody()); | |||
} else if (responseType.Equals(WebHttpRequest.ResponseType.Faild)) { | |||
Debug.Log("errorFlag=" + request.errorFlag); | |||
} | |||
else if (responseType.Equals(WebHttpRequest.ResponseType.NetworkError)) | |||
{ | |||
Debug.Log("NetworkError" + request.errorFlag); | |||
} | |||
request.Reset(); | |||
} | |||
} | |||
} | |||
</pre> | |||
==Httpリクエストサンプル(これはDelegateを使ってないダメな例)== | |||
using System.Collections; | using System.Collections; | ||
using System.Collections.Generic; | using System.Collections.Generic; | ||
2018年11月14日 (水) 15:30時点における版
Httpリクエストサンプル
以下delegateを使ったhttpリクエストサンプルコード WebHttpRequest.cs
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class WebHttpRequest : MonoBehaviour {
string text = "";
public bool errorFlag = false;
public enum ResponseType
{
Success,
Faild,
NetworkError
}
public delegate void CustomCallback(ResponseType responseType);
private CustomCallback callbacks;
public void addCallback(CustomCallback callback)
{
callbacks += callback;
}
public void Exec (string url) {
text = "";
errorFlag = false;
StartCoroutine(Get (url));
}
public IEnumerator Get (string url) {
var request = new UnityWebRequest();
request.downloadHandler = new DownloadHandlerBuffer();
request.url = url;
request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
request.method = UnityWebRequest.kHttpVerbGET;
yield return request.Send();
if (request.isNetworkError) {
errorFlag = true;
callbacks(ResponseType.NetworkError);
} else {
if (request.responseCode == 200) {
text = request.downloadHandler.text;
callbacks(ResponseType.Success);
} else {
errorFlag = true;
callbacks(ResponseType.Faild);
}
}
}
public string GetBody() {
return text;
}
public void Reset() {
text = "";
errorFlag = false;
}
}
呼び出し元 NewBehaviourScript.cs
public class NewBehaviourScript : MonoBehaviour {
WebHttpRequest request;
// http送信
void Start () {
const string uri = "http://raw.githubusercontent.com/nlohmann/json/develop/test/data/json.org/1.json";
string param1 = "value1";
param1 = WWW.EscapeURL(param1);
string query = "?hoge=" + param1;
string url = uri + query;
GameObject gameObj = new GameObject();
request = gameObj.AddComponent<WebHttpRequest>();
request.Exec(url);
request.addCallback(OnResponse);
Debug.Log("request=" + url);
}
// httpのresponse受信
public void OnResponse(WebHttpRequest.ResponseType responseType)
{
Debug.Log("onResponse=" + responseType);
if (request)
{
if (responseType.Equals(WebHttpRequest.ResponseType.Success))
{
Debug.Log("body=" + request.GetBody());
} else if (responseType.Equals(WebHttpRequest.ResponseType.Faild)) {
Debug.Log("errorFlag=" + request.errorFlag);
}
else if (responseType.Equals(WebHttpRequest.ResponseType.NetworkError))
{
Debug.Log("NetworkError" + request.errorFlag);
}
request.Reset();
}
}
}
Httpリクエストサンプル(これはDelegateを使ってないダメな例)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.Networking;
public class WebHttpRequest : MonoBehaviour {
string text = "";
public bool errorFlag = false;
public void Exec (string url) {
text = "";
errorFlag = false;
StartCoroutine(Get (url));
}
public IEnumerator Get (string url) {
var request = new UnityWebRequest();
request.downloadHandler = new DownloadHandlerBuffer();
request.url = url;
request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
request.method = UnityWebRequest.kHttpVerbGET;
yield return request.Send();
if (request.isError) {
Debug.Log(request.error);
} else {
if (request.responseCode == 200) {
text = request.downloadHandler.text;
Debug.Log(request.downloadHandler.text);
}
}
}
public string GetBody() {
return text;
}
public void Reset() {
text = "";
errorFlag = false;
}
}
呼び出し側
const string uri = "ttp://hogehoge.com/api?param1="; string param1 = "value1"; param1 = WWW.EscapeURL (param1); string url = uri + param1; GameObject gameObj = new GameObject(); WebHttpRequest request = gameObj.AddComponent<WebHttpRequest>(); request.Exec (url);
呼び出し側で受信チェック
void Update ()
{
if (request) {
if (!request.GetBody ().Equals ("")) {
// 処理
request.Reset ();
} else if (request.errorFlag) {
request.errorFlag = false;
}
}
}