using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class HttpMethod :MonoBehaviour
{
static public void Request (bool IsGet, string url, Dictionary<string, string> post, ProcessingCallBack processing, TimeOutCallBack timeout, ProcessResultCallBack result)
{
GameObject go = new GameObject ();
go.name = "Request";
HttpMethod method = go.AddComponent<HttpMethod> ();
if (processing != null)
method.processing += processing;
if (timeout != null)
method.timeout += timeout;
if (result != null)
method.Resultcallback += result;
method.StartRequest (url, post, IsGet);
}
public string result = null;
public bool IsOk = false;
public float mJindu = 0;
public delegate void ProcessResultCallBack (bool isok,string result);
public event ProcessResultCallBack Resultcallback;
public delegate void TimeOutCallBack ();
public event TimeOutCallBack timeout;
public delegate void ProcessingCallBack (int jindu);
public event ProcessingCallBack processing;
WWW request = null;
bool isEnable = false;
float timeoutcount = HttpConfigs.HTTPTimeOut;
public void StartRequest (string url, Dictionary<string, string> parameter, bool IsGet)
{
Reset ();
if (IsGet) {
StartCoroutine (GET (url, parameter));
} else {
StartCoroutine (POST (url, parameter));
}
isEnable = true;
}
int m = 0;
void Update ()
{
if (!isEnable)
return;
timeoutcount -= Time.deltaTime;
int j = (int)(request.progress * 100);
if (j > m) {
if (processing != null) {
processing (j);
m = j;
}
}
if (timeoutcount <= 0) {
if (mJindu < 1) {
request.Dispose ();
if (timeout != null){
timeout ();
<span style="white-space:pre"> </span>this.enabled = false;
<span style="white-space:pre"> </span>destroy();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}
if (request.isDone)
this.enabled = false;
}
//POST请求
public IEnumerator POST (string url, Dictionary<string, string> post)
{
Debug.Log ("-----HttpMethod--------------IEnumerator POST(string url, Dictionary<string, string> post)--------------");
WWWForm form = new WWWForm ();
foreach (KeyValuePair<string, string> post_arg in post) {
form.AddField (post_arg.Key, post_arg.Value);
}
request = new WWW (url, form);
yield return request;
mJindu = request.progress;
Debug.Log ("www.progress:" + request.progress);
if (request.error != null) {
//POST请求失败
Debug.Log ("error is :" + request.error);
IsOk = false;
result = request.error;
} else {
//POST请求成功
//Debug.Log("request ok : " + www.text);
IsOk = true;
result = request.text;
}
if (Resultcallback != null)
Resultcallback (IsOk, result);
Invoke ("destroy", 3f);
}
public IEnumerator POST (string postScoreURL, string jsonString)
{
//Debug.Log("jsonString: " + jsonString);
var encoding = new System.Text.UTF8Encoding ();
var postHeader = new Hashtable ();
postHeader.Add ("Content-Type", "text/json");
postHeader.Add ("Content-Length", jsonString.Length);
request = new WWW (postScoreURL, encoding.GetBytes (jsonString), postHeader);
yield return request;
mJindu = request.progress;
// Print the error to the console
if (request.error != null) {
Debug.Log ("request error: " + request.error);
IsOk = false;
result = request.error;
} else {
IsOk = true;
result = request.text;
}
if (Resultcallback != null)
Resultcallback (IsOk, result);
Invoke ("destroy", 3f);
}
//GET请求
public IEnumerator GET (string url)
{
request = new WWW (url);
yield return request;
mJindu = request.progress;
//Debug.Log("www.progress:" + www.progress);
if (request.error != null) {
//GET请求失败
//Debug.Log("error is :" + www.error);
IsOk = false;
result = request.error;
} else {
//GET请求成功
// Debug.Log("request ok : " + www.text);
IsOk = true;
result = request.text;
}
if (Resultcallback != null)
Resultcallback (IsOk, result);
Invoke ("destroy", 3f);
}
//GET请求(url?传值、效率高、不安全 )
public IEnumerator GET (string url, Dictionary<string, string> get)
{
string Parameters;
bool first;
if (get.Count > 0) {
first = true;
Parameters = "?";
//从集合中取出所有参数,设置表单参数(AddField()).
foreach (KeyValuePair<string, string> post_arg in get) {
if (first)
first = false;
else
Parameters += "&";
Parameters += post_arg.Key + "=" + post_arg.Value;
}
} else {
Parameters = "";
}
//直接URL传值就是get
request = new WWW (url + Parameters);
yield return request;
mJindu = request.progress;
//Debug.Log("www.progress:" + www.progress);
if (request.error != null) {
//GET请求失败
result = "error :" + request.error;
IsOk = false;
} else {
//GET请求成功
result = request.text;
IsOk = true;
}
if (Resultcallback != null)
Resultcallback (IsOk, result);
Invoke ("destroy", 3f);
}
public void Reset ()
{
result = null;
IsOk = false;
mJindu = 0;
}
public void destroy ()
{
if (request != null)
request.Dispose ();
DestroyObject (gameObject);
}
}