赞
踩
using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using Newtonsoft.Json.Linq; using UnityEngine.Networking; using System.Net; using System.IO; using System; using System.Text; /// <summary> /// 网络连接类 /// </summary> public class NetClient : MonoBehaviour { public static NetClient instance; private void Awake() { instance = this; } private string webURL = "服务器地址"; private string apiURL = ""; private string appId = "003113"; /// <summary> /// 连接状态 /// </summary> public enum connectState { None, Register,//注册 Login,//登陆 GetCode,//获得验证码 GetGold,//获得金币 ConsumeGold,//消耗金币 ResetPassword,//设置新密码 RetrievePassword,//找回密码发送邮件 AddGold,//增加金币,google充值 } /// <summary> /// 当前连接状态 /// </summary> private connectState currentState = connectState.None; #region 属性 public bool IsBusy = false;//用于检测是否重复发送 #endregion /// <summary> /// 开始连接服务器 /// </summary> /// <param name="_state"></param> public void Client(connectState _state) { if (!IsBusy) { Utils.Log("start connectting......"+ _state); IsBusy = true; currentState = _state; JsonData dataJson = new JsonData();//写入json格式的数据 byte[] postBytes; switch (_state) { case connectState.Register: apiURL = "/api/client/v1/user/register"; dataJson["account"] = DataLogin.instance.GetUserAccount(); dataJson["code"] = DataLogin.instance.GetCode(); dataJson["pwd"] = DataLogin.instance.GetUserPassword(); postBytes = System.Text.Encoding.Default.GetBytes(dataJson.ToJson());//把json格式的字符串转化成数组 StartCoroutine(ConnectPost(webURL + apiURL, postBytes,0)); break; case connectState.Login: apiURL = "/api/client/v1/user/login"; dataJson["account"] = DataLogin.instance.CurAccount; dataJson["pwd"] = DataLogin.instance.CurPassword; postBytes = System.Text.Encoding.Default.GetBytes(dataJson.ToJson());//把json格式的字符串转化成数组 StartCoroutine(ConnectPost(webURL + apiURL, postBytes, 0)); break; case connectState.GetCode: apiURL = "/api/client/v1/user/getCode"; StartCoroutine(ConnectGet(webURL + apiURL + "?account=" + DataLogin.instance.GetUserAccount())); break; case connectState.GetGold: apiURL = "/api/client/v1/user/account"; StartCoroutine(ConnectGet(webURL+apiURL+ "?userId="+DataLogin.instance.GetUserID())); break; case connectState.ConsumeGold: apiURL = "/api/client/v1/user/consumeGold"; dataJson["gold"] = DataLogin.instance.CurGoldConsumeNum; dataJson["userId"] = DataLogin.instance.GetUserID(); postBytes = System.Text.Encoding.Default.GetBytes(dataJson.ToJson());//把json格式的字符串转化成数组 StartCoroutine(ConnectPost(webURL + apiURL, postBytes, 0)); break; case connectState.ResetPassword: apiURL = "/api/client/v1/user/resetPassword"; dataJson["code"] = DataLogin.instance.CurCode; dataJson["pwd"] = DataLogin.instance.CurPassword; dataJson["account"] = DataLogin.instance.CurAccount; postBytes = System.Text.Encoding.Default.GetBytes(dataJson.ToJson());//把json格式的字符串转化成数组 StartCoroutine(ConnectPost(webURL + apiURL, postBytes, 0)); break; case connectState.RetrievePassword: apiURL = "/api/client/v1/user/retrievePassword"; postBytes = System.Text.Encoding.Default.GetBytes( "email=" + DataLogin.instance.CurAccount + "&userId=" + DataLogin.instance.GetUserID() ); StartCoroutine(ConnectPost(webURL + apiURL, postBytes, 1)); break; case connectState.AddGold: apiURL = "/api/client/v1/user/addGold"; dataJson["gold"] = DataLogin.instance.CurAddGold; dataJson["userId"] = DataLogin.instance.GetUserID(); postBytes = System.Text.Encoding.Default.GetBytes(dataJson.ToJson());//把json格式的字符串转化成数组 StartCoroutine(ConnectPost(webURL + apiURL, postBytes, 0)); break; default: IsBusy = false; break; } } } /// <summary> /// POST方式连接 /// </summary> /// <param name="url"></param> /// <param name="postBytes"></param> /// <returns></returns> IEnumerator ConnectPost(string url, byte[] postBytes,int headerType) { Utils.Log(url); UnityWebRequest request = new UnityWebRequest(url, "POST");//method传输方式,默认为Get; request.uploadHandler = new UploadHandlerRaw(postBytes);//实例化上传缓存器 request.downloadHandler = new DownloadHandlerBuffer();//实例化下载存贮器 request.SetRequestHeader("Content-Type", headerType == 0 ? "application/json" : "application/x-www-form-urlencoded");//更改内容类型, request.SetRequestHeader("appId", appId); yield return request.SendWebRequest();//发送请求 Utils.Log("Status Code: " + request.responseCode);//获得返回值 IsBusy = false; if (request.responseCode == 200)//检验是否成功 { IsBusy = false; Utils.Log("connect success"); string dataStr = request.downloadHandler.text;//打印获得值 switch (currentState) { case connectState.Register: DataHandleRegister(dataStr); break; case connectState.Login: DataHandleLogin(dataStr); break; case connectState.ConsumeGold: DataHandleConsumeGold(dataStr); break; case connectState.ResetPassword: DataHandleResetPassword(dataStr); break; case connectState.RetrievePassword: DataHandleRetrievePassword(dataStr); break; case connectState.AddGold: DataHandleAddGold(dataStr); break; default: break; } } else { Utils.Log("connect failed,error code is " + request.responseCode); ViewSystemTips.instance.show(DataTips.Net_Connect_Failed+"code:"+ request.responseCode); IsBusy = false; switch (currentState) { case connectState.Register: DataLogin.instance.SetUserAccount(""); DataLogin.instance.SetUserPasswrod(""); DataLogin.instance.SetCode(""); break; case connectState.Login: DataLogin.instance.SetUserAccount(""); DataLogin.instance.SetUserPasswrod(""); break; default: break; } } } /// <summary> /// get方式进行连接 /// </summary> /// <param name="_url"></param> /// <returns></returns> IEnumerator ConnectGet(string _url) { Utils.Log(_url); UnityWebRequest request = UnityWebRequest.Get(_url); request.SetRequestHeader("appId", appId); yield return request.SendWebRequest(); //if (request.isError) //{ // IsBusy = false; // Utils.Log("connect failed,error code is " + request.responseCode); // ViewSystemTips.instance.show("Server connection failed"); //} //else //{ if (request.responseCode == 200) { IsBusy = false; Utils.Log("connect success"); string dataStr = request.downloadHandler.text; switch (currentState) { case connectState.GetCode: DataHandleToken(dataStr); break; case connectState.GetGold: DataHandleGold(dataStr); break; default: break; } } else { Utils.Log("connect failed,error code is " + request.responseCode); ViewSystemTips.instance.show(DataTips.Net_Connect_Failed+ "code is:"+request.responseCode); IsBusy = false; } //} } /// <summary> /// 处理注册数据 /// </summary> private void DataHandleRegister(string _data) { Utils.Log("data:" + _data); JObject jsObj = JObject.Parse(_data); string statusStr = jsObj["status"].ToString(); if (statusStr.Equals("success")) { Utils.Log("register success"); string resultStr = jsObj["result"].ToString(); Utils.Log("result:" + resultStr); JObject resultObj = JObject.Parse(resultStr); Utils.Log("account:" + resultObj["account"].ToString()); Utils.Log("gold:" + resultObj["gold"].ToString()); Utils.Log("token:" + resultObj["token"].ToString()); Utils.Log("userId:" + resultObj["userId"].ToString()); DataLogin.instance.SetUserAccount(resultObj["account"].ToString()); DataLogin.instance.SetTokne(resultObj["token"].ToString()); DataLogin.instance.SetUserID(resultObj["userId"].ToString()); ViewSystemTips.instance.show(DataTips.Net_Register_Success); DataLogin.instance.SaveLocalUserData(); EventManage.Instance.Event(EventName.Net_Register_Success, null); } else { Utils.Log("register failed"); string messageStr = jsObj["message"].ToString(); Utils.Log("message:" + messageStr); ViewSystemTips.instance.show(messageStr); } } /// <summary> /// 处理登陆数据 /// </summary> private void DataHandleLogin(string _data) { Utils.Log("data:" + _data); JObject jsObj = JObject.Parse(_data); string statusStr = jsObj["status"].ToString(); if (statusStr.Equals("success")) { Utils.Log("login success"); string resultStr = jsObj["result"].ToString(); Utils.Log("result:" + resultStr); JObject resultObj = JObject.Parse(resultStr); Utils.Log("account:" + resultObj["account"].ToString()); Utils.Log("gold:" + resultObj["gold"].ToString()); Utils.Log("token:" + resultObj["token"].ToString()); Utils.Log("userId:" + resultObj["userId"].ToString()); DataLogin.instance.SetUserAccount(resultObj["account"].ToString()); DataLogin.instance.SetTokne(resultObj["token"].ToString()); DataLogin.instance.SetUserID(resultObj["userId"].ToString()); int gold = int.Parse(resultObj["gold"].ToString()); LocalData.GetInstance().SetCoinTotal(gold); //if (gold == 0) //{ // if (LocalData.GetInstance().GetGold() > 0) // { // DataLogin.instance.CurAddGold = LocalData.GetInstance().GetGold(); // Client(connectState.AddGold); // } //} //else //{ // if (LocalData.GetInstance().GetGold() > gold) // { // DataLogin.instance.CurAddGold = LocalData.GetInstance().GetGold()- gold; // Client(connectState.AddGold); // } // else // { // DataLogin.instance.CurConsumeGoldIndex = -1; // DataLogin.instance.CurGoldConsumeNum = gold-LocalData.GetInstance().GetGold(); // Client(connectState.ConsumeGold); // } //} ViewSystemTips.instance.show(DataTips.Net_Login_Success); DataLogin.instance.SaveLocalUserData(); LocalData.GetInstance().SaveLocalData(); EventManage.Instance.Event(EventName.Net_Login_Success, null); } else { Utils.Log("login failed"); string messageStr = jsObj["message"].ToString(); Utils.Log("message:" + messageStr); ViewSystemTips.instance.show(messageStr); } } /// <summary> /// 处理消耗金币数据 /// </summary> private void DataHandleConsumeGold(string _data) { Utils.Log("data:" + _data); JObject jsObj = JObject.Parse(_data); string statusStr = jsObj["status"].ToString(); if (statusStr.Equals("success")) { Utils.Log("consume gold success"); string resultStr = jsObj["result"].ToString(); Utils.Log("result:" + resultStr); //发送金币消耗成功事件,在注册位置进行本地数据修改 EventManage.Instance.Event(EventName.Net_ConsumeGold_Success, null); Utils.Log("金币消耗成功,处理游戏逻辑"+ DataLogin.instance.CurConsumeGoldIndex); } else { Utils.Log("consume gold failed"); string messageStr = jsObj["message"].ToString(); Utils.Log("message:" + messageStr); ViewSystemTips.instance.show(messageStr); } } /// <summary> /// 处理修改密码数据 /// </summary> private void DataHandleResetPassword(string _data) { Utils.Log("data:" + _data); JObject jsObj = JObject.Parse(_data); string statusStr = jsObj["status"].ToString(); if (statusStr.Equals("success")) { Utils.Log("reset password success"); string resultStr = jsObj["result"].ToString(); Utils.Log("result:" + resultStr); EventManage.Instance.Event(EventName.Net_ResetPassword_Success, null); ViewSystemTips.instance.show(DataTips.Net_ResetPassword_Success); } else { Utils.Log("reset password failed"); string messageStr = jsObj["message"].ToString(); Utils.Log("message:" + messageStr); ViewSystemTips.instance.show(messageStr); } } /// <summary> /// 处理找回密码发送邮箱密码数据 /// </summary> private void DataHandleRetrievePassword(string _data) { Utils.Log("data:" + _data); JObject jsObj = JObject.Parse(_data); string statusStr = jsObj["status"].ToString(); if (statusStr.Equals("success")) { Utils.Log("retrieve password success"); string resultStr = jsObj["result"].ToString(); Utils.Log("result:" + resultStr); EventManage.Instance.Event(EventName.Net_RetrievePassword_Success, null); ViewSystemTips.instance.show(DataTips.Net_RetrievePassword_Success); } else { Utils.Log("retrieve password failed"); string messageStr = jsObj["message"].ToString(); Utils.Log("message:" + messageStr); ViewSystemTips.instance.show(messageStr); } } /// <summary> /// 处理找增加金币数据 /// </summary> private void DataHandleAddGold(string _data) { Utils.Log("data:" + _data); JObject jsObj = JObject.Parse(_data); string statusStr = jsObj["status"].ToString(); if (statusStr.Equals("success")) { Utils.Log("add gold success"); string resultStr = jsObj["result"].ToString(); Utils.Log("result:" + resultStr); //EventManage.Instance.Event(EventName.Net_AddGold_Success, null); } else { Utils.Log("retrieve password failed"); string messageStr = jsObj["message"].ToString(); Utils.Log("message:" + messageStr); ViewSystemTips.instance.show(messageStr); } } /// <summary> /// 处理获取验证码数据 /// </summary> private void DataHandleToken(string _data) { Utils.Log("data:" + _data); JObject jsObj = JObject.Parse(_data); string statusStr = jsObj["status"].ToString(); if (statusStr.Equals("success")) { Utils.Log("get token success"); string codeStr = jsObj["result"].ToString(); Utils.Log("code:" + codeStr); DataLogin.instance.SetCode(codeStr); EventManage.Instance.Event(EventName.Net_GetCode_Success, null); } else { Utils.Log("get token failed"); string messageStr = jsObj["message"].ToString(); Utils.Log("message:" + messageStr); ViewSystemTips.instance.show(messageStr); } } /// <summary> /// 处理获取金币数据 /// </summary> private void DataHandleGold(string _data) { Utils.Log("data:" + _data); JObject jsObj = JObject.Parse(_data); string statusStr = jsObj["status"].ToString(); if (statusStr.Equals("success")) { Utils.Log("get gold success"); string resultStr = jsObj["result"].ToString(); Utils.Log("result:" + resultStr); JObject resultObj = JObject.Parse(resultStr); string goldStr = resultObj["gold"].ToString(); Utils.Log("gold:" + goldStr); LocalData.GetInstance().SetCoinTotal(int.Parse(goldStr)); EventManage.Instance.Event(EventName.Net_GetCode_Success,null); } else { Utils.Log("get gold failed"); string messageStr = jsObj["message"].ToString(); Utils.Log("message:" + messageStr); ViewSystemTips.instance.show(messageStr); } } } ///* // * url:为请求地址 // * postData:请求内容例如:"key1=value1&key2=value2&key3=value3" // */ //void PostUrl(string url, string postData) //{ // IsBusy = false; // Utils.Log(url + "," + postData); // string result = ""; // try // { // HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); // req.Method = "POST"; // req.ContentType = "application/x-www-form-urlencoded"; // req.Timeout = 8000;//请求超时时间 // byte[] data = Encoding.UTF8.GetBytes(postData); // req.ContentLength = data.Length; // using (Stream reqStream = req.GetRequestStream()) // { // reqStream.Write(data, 0, data.Length); // reqStream.Close(); // } // Utils.Log("HttpWebRequest send success"); // HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); // Stream stream = resp.GetResponseStream(); // //获取响应内容 // using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) // { // result = reader.ReadToEnd(); // Utils.Log("result=====================" + result); // DataHandleRetrievePassword(result); // } // } // catch (Exception e) // { // Utils.Log("e=====================" + e.Message); // } //}
json解析用到了LitJson.dll和Newtonsoft.Json.dll
下载地址:https://download.csdn.net/download/leo347/85403901
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。