| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718 |
- using System;
- using System.Collections;
- using UnityEngine;
- using UnityEngine.Networking;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- namespace SmartBowSDK
- {
- public class SmartBowNetwork : MonoBehaviour
- {
- public SmartBowHelper smartBowHelper;
- // 本地 IP 地址(只在本地环境下生效)
- static string localIPAddress = "192.168.0.108";
- //是否使用本地环境
- static bool isLocal = false;
- // 服务器路径
- static string serverPath = "/SmartBowBusinessServer";
- // 最终服务器地址
- static string serverURL => isLocal
- ? $"http://{localIPAddress}:11432{serverPath}"
- : $"https://xmjssvr.cn{serverPath}";
- //private string serverURL = "https://xmjssvr.cn/SmartBowBusinessServer";
- //private const string serverURL = "http://127.0.0.1:11332/SmartBowBusinessServer";
- private string loginToken;
- /// <summary>
- /// 运行时设置本地 IP 并启用本地环境
- /// </summary>
- public static void SetLocal(string ip)
- {
- isLocal = true;
- localIPAddress = ip;
- Debug.Log($"[SmartBowNetwork] 设置IP: {ip}");
- }
- /// <summary>
- /// 发送手机验证码
- /// </summary>
- public void SendPhoneValidateCode(string phone, int language, Action<RequestResult> callback)
- {
- string url = $"{serverURL}/phoneValidate/sendPhoneValidateCode" +
- $"?phone={UnityWebRequest.EscapeURL(phone)}&language={language}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 验证手机验证码
- /// </summary>
- public void ValidatePhoneCode(string phone, int code, Action<RequestResult> callback)
- {
- string url = $"{serverURL}/phoneValidate/validatePhone" +
- $"?phone={UnityWebRequest.EscapeURL(phone)}&code={code}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 发送邮箱验证码
- /// </summary>
- public void SendEmailValidateCode(string email, int language, Action<RequestResult> callback)
- {
- string url = $"{serverURL}/emailValidate/sendEmailValidateCode" +
- $"?email={UnityWebRequest.EscapeURL(email)}&language={language}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 验证邮箱验证码
- /// </summary>
- public void ValidateEmailCode(string email, int code, Action<RequestResult> callback)
- {
- string url = $"{serverURL}/emailValidate/validateEmail" +
- $"?email={UnityWebRequest.EscapeURL(email)}&code={code}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 用户注册
- /// </summary>
- /// <param name="serverIndex">服务器索引</param>
- /// <param name="username">用户名</param>
- /// <param name="password">密码</param>
- /// <param name="email">邮箱</param>
- /// <param name="phone">手机号</param>
- /// <param name="code">当前接收的code,海外用邮箱 serverIndex = 1,国内 serverIndex = 0用手机号</param>
- /// <param name="callback">回调</param>
- public void RegisterByCode(int serverIndex, string username, string password, string email, string phone,int code, Action<RequestResult> callback)
- {
- string url = $"{serverURL}/gameLogin/registerByCode" +
- $"?serverIndex={serverIndex}" +
- $"&username={UnityWebRequest.EscapeURL(username)}" +
- $"&password={UnityWebRequest.EscapeURL(password)}" +
- $"&email={UnityWebRequest.EscapeURL(email)}" +
- $"&phone={UnityWebRequest.EscapeURL(phone)}" +
- $"&code={code}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- //public IEnumerator ListUsernamesByEmail(string email, long timestamp, string sign, Action<RequestResult> callback)
- //{
- // string url = serverURL + "/gameLogin/listUsernamesByEmail";
- // WWWForm form = new WWWForm();
- // form.AddField("email", email);
- // form.AddField("timestamp", timestamp.ToString());
- // form.AddField("sign", sign);
- // using (UnityWebRequest request = UnityWebRequest.Post(url, form))
- // {
- // yield return request.SendWebRequest();
- // RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
- // if (callback != null) callback(requestResult);
- // }
- //}
- //public IEnumerator ListUsernamesByPhone(string phone, long timestamp, string sign, Action<RequestResult> callback)
- //{
- // string url = serverURL + "/gameLogin/listUsernamesByPhone";
- // WWWForm form = new WWWForm();
- // form.AddField("phone", phone);
- // form.AddField("timestamp", timestamp.ToString());
- // form.AddField("sign", sign);
- // using (UnityWebRequest request = UnityWebRequest.Post(url, form))
- // {
- // yield return request.SendWebRequest();
- // RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
- // if (callback != null) callback(requestResult);
- // }
- //}
- //public IEnumerator ResetPassword(string sign, long timestamp, string username, string password, Action<RequestResult> callback)
- //{
- // string url = serverURL + "/gameLogin/resetPassword";
- // WWWForm form = new WWWForm();
- // form.AddField("sign", sign);
- // form.AddField("timestamp", timestamp.ToString());
- // form.AddField("username", username);
- // form.AddField("password", password);
- // using (UnityWebRequest request = UnityWebRequest.Post(url, form))
- // {
- // yield return request.SendWebRequest();
- // RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
- // if (callback != null) callback(requestResult);
- // }
- //}
- //重置密码
- public void ResetPasswordByAccount(int serverIndex,string account, string codeAccount, int code, string newPassword, Action<RequestResult> callback)
- {
- StartCoroutine(ResetPasswordByAccountCoroutine(serverIndex,account, codeAccount, code, newPassword, callback));
- }
- /// <summary>
- /// 重置密码流程,先验证Code,在获取list,再重置对应的账号。
- /// 基本和弓箭app流程一样
- /// </summary>
- /// <param name="serverIndex"></param>
- /// <param name="account"></param>
- /// <param name="codeAccount"></param>
- /// <param name="code"></param>
- /// <param name="newPassword"></param>
- /// <param name="callback"></param>
- /// <returns></returns>
- private IEnumerator ResetPasswordByAccountCoroutine(int serverIndex,string account,string codeAccount, int code, string newPassword, Action<RequestResult> callback)
- {
- RequestResult validateResult = null;
- if (!(serverIndex >= 0 && serverIndex <= 2))
- {
- callback?.Invoke(new RequestResult
- {
- code = -10,
- msg = "serverIndex 错误!",
- });
- yield break;
- }
- bool isPhone = serverIndex == 0 ? true : false;
- // 1. 验证验证码
- string validateUrl = isPhone
- ? $"{serverURL}/phoneValidate/validatePhone?phone={UnityWebRequest.EscapeURL(codeAccount)}&code={code}"
- : $"{serverURL}/emailValidate/validateEmail?email={UnityWebRequest.EscapeURL(codeAccount)}&code={code}";
- yield return Post(validateUrl, new WWWForm(), result => validateResult = result);
- if (validateResult == null || validateResult.code != 0)
- {
- callback?.Invoke(new RequestResult
- {
- code = -10,
- msg = isPhone ? "手机号验证码验证失败" : "邮箱验证码验证失败"
- });
- yield break;
- }
- // 2. 提取验证信息
- JObject data = validateResult.data as JObject;
- string verifiedAccount = data.Value<string>(isPhone ? "phone" : "email");
- long timestamp = data.Value<long>("timestamp");
- string sign = data.Value<string>("sign");
- // 3. 查询用户名
- RequestResult listResult = null;
- string listUrl = isPhone
- ? $"{serverURL}/gameLogin/listUsernamesByPhone"
- : $"{serverURL}/gameLogin/listUsernamesByEmail";
- WWWForm listForm = new WWWForm();
- listForm.AddField(isPhone ? "phone" : "email", verifiedAccount);
- listForm.AddField("timestamp", timestamp.ToString());
- listForm.AddField("sign", sign);
- yield return Post(listUrl, listForm, result => listResult = result);
- if (listResult == null || listResult.code != 0)
- {
- callback?.Invoke(new RequestResult { code = -11, msg = "未找到绑定的账号" });
- yield break;
- }
- // 4. 精确匹配账号名再重置密码
- JArray users = listResult.data as JArray;
- bool matched = false;
- foreach (var item in users)
- {
- string username = item.Value<string>("username");
- long ts = item.Value<long>("timestamp");
- string sgn = item.Value<string>("sign");
- SmartBowLogger.Log(this,$"server: {username} vs account: {account}");
- if (account.ToLower() == username.ToLower())
- {
- matched = true;
- SmartBowLogger.Log(this,"匹配成功:" + username.ToLower());
- // 5. 请求重置密码
- string resetUrl = $"{serverURL}/gameLogin/resetPassword";
- WWWForm resetForm = new WWWForm();
- resetForm.AddField("sign", sgn);
- resetForm.AddField("timestamp", ts.ToString());
- resetForm.AddField("username", username);
- resetForm.AddField("password", newPassword);
- yield return Post(resetUrl, resetForm, callback);
- break;
- }
- }
- // 6. 如果没有匹配账号,提示
- if (!matched)
- {
- callback?.Invoke(new RequestResult { code = -12, msg = "未找到对应账号绑定" });
- }
- }
- /// <summary>
- /// 登录
- /// gameID和channelID请询问插件给予者给予
- /// </summary>
- /// <param name="gameID"></param>
- /// <param name="channelID"></param>
- /// <param name="username"></param>
- /// <param name="password"></param>
- /// <param name="callback"></param>
- public void Login(string gameID, string channelID, string username, string password, Action<LoginResult> callback)
- {
- WWWForm form = new WWWForm();
- form.AddField("gameID", gameID);
- form.AddField("channelID", channelID);
- form.AddField("username", username);
- form.AddField("password", password);
- StartCoroutine(Post(serverURL + "/SmartBowSDK/login", form, (res) =>
- {
- bool loginSuccess = res.code == 0;
- if (loginSuccess) loginToken = res.data as string;
- LoginResult loginResult = new LoginResult();
- loginResult.success = loginSuccess;
- loginResult.message = res.msg;
- callback?.Invoke(loginResult);
- }));
- }
- /// <summary>
- /// 登出
- /// </summary>
- /// <param name="callback"></param>
- public void Logout(Action<bool> callback)
- {
- loginToken = null;
- callback?.Invoke(true);
- }
- /// <summary>
- /// 获取用户信息
- /// </summary>
- /// <param name="callback"></param>
- public void GetUserInfo(Action<GetUserInfoResult> callback)
- {
- GetUserInfoResult getUserInfoResult = new GetUserInfoResult();
- if (loginToken == null)
- {
- getUserInfoResult.message = "尚未登录";
- callback?.Invoke(getUserInfoResult);
- return;
- }
- WWWForm form = new WWWForm();
- form.AddField("token", loginToken);
- StartCoroutine(Post(serverURL + "/SmartBowSDK/getUserInfo", form, (res) =>
- {
- if (res.code == 0)
- {
- UserInfo userInfo = (res.data as JObject).ToObject<UserInfo>();
- getUserInfoResult.success = true;
- getUserInfoResult.userInfo = userInfo;
- }
- getUserInfoResult.message = res.msg;
- callback?.Invoke(getUserInfoResult);
- }));
- }
- /// <summary>
- /// 设置用户名
- /// </summary>
- /// <param name="nickname">用户名字</param>
- /// <param name="callback"></param>
- public void SaveUserName(string nickname, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- string url = $"{serverURL}/SmartBowSDK/saveUserName?token={loginToken}&nickname={UnityWebRequest.EscapeURL(nickname)}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 设置用户的多个信息
- /// </summary>
- /// <param name="userInfo">用户信息对象</param>
- /// <param name="callback"></param>
- public void SaveUserInfo(UserInfoExtended userInfo, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- string json = JsonConvert.SerializeObject(userInfo);
- UnityWebRequest request = new UnityWebRequest($"{serverURL}/SmartBowSDK/saveUserInfo?token={loginToken}", "POST");
- byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(json);
- request.uploadHandler = new UploadHandlerRaw(bodyRaw);
- request.downloadHandler = new DownloadHandlerBuffer();
- request.SetRequestHeader("Content-Type", "application/json");
- StartCoroutine(SendRequest(request, callback));
- }
- /// <summary>
- /// 根据密钥上传分数
- /// </summary>
- /// <param name="secret"></param>
- /// <param name="score"></param>
- /// <param name="callback"></param>
- public void UploadSeasonSinglePlayerGameRes(string secret, int score, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- string url = $"{serverURL}/SmartBowSDK/UploadSeasonSinglePlayerGameRes?token={loginToken}&secret={UnityWebRequest.EscapeURL(secret)}&score={score}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 上传赛季PK分数
- /// </summary>
- /// <param name="roomKey">PK房间ID</param>
- /// <param name="secret">密钥,游戏类型(解析得到)</param>
- /// <param name="p2ID">对手ID</param>
- /// <param name="gameRes">结果(0:我赢;1:他赢;2:平局)</param>
- /// <param name="callback">回调</param>
- public void UploadSeasonPKGameRes(string roomKey, string secret, int p2ID, int gameRes, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- string url = $"{serverURL}/SmartBowSDK/UploadSeasonPKGameRes" +
- $"?token={loginToken}" +
- $"&roomKey={UnityWebRequest.EscapeURL(roomKey)}" +
- $"&secret={UnityWebRequest.EscapeURL(secret)}" +
- $"&p2ID={p2ID}" +
- $"&gameRes={gameRes}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 根据密钥获取排行榜
- /// </summary>
- /// <param name="secret">密钥</param>
- /// <param name="rankArea">排行区域 3:国,1:省,2市,其他:全球</param>
- /// <param name="country">国家</param>
- /// <param name="state">省</param>
- /// <param name="city">城市</param>
- /// <param name="callback"></param>
- public void GetSeasonRankListByGameType(string secret, int rankArea, string country, string state, string city, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- string url = $"{serverURL}/SmartBowSDK/GetSeasonRankListByGameType?" +
- $"token={loginToken}" +
- $"&rankArea={rankArea}" +
- $"&secret={UnityWebRequest.EscapeURL(secret)}" +
- $"&countryCode={UnityWebRequest.EscapeURL(country)}" +
- $"&stateCode={UnityWebRequest.EscapeURL(state)}" +
- $"&cityCode={UnityWebRequest.EscapeURL(city)}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 根据密钥获取自定义排行榜
- /// </summary>
- /// <param name="secret">密钥</param>
- /// <param name="rankArea">排行区域 3:国,1:省,2市,其他:全球</param>
- /// <param name="country">国家</param>
- /// <param name="state">省</param>
- /// <param name="city">市</param>
- /// <param name="rankType">1是降序,其他是升序(不能小于0)</param>
- /// <param name="count">数量:不能小于0</param>
- /// <param name="callback"></param>
- public void GetSeasonRankListByCustom(string secret, int rankArea, string country, string state, string city, int rankType, int count, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- string url = $"{serverURL}/SmartBowSDK/GetSeasonRankListByCustom?" +
- $"token={loginToken}" +
- $"&rankArea={rankArea}" +
- $"&secret={UnityWebRequest.EscapeURL(secret)}" +
- $"&countryCode={UnityWebRequest.EscapeURL(country)}" +
- $"&stateCode={UnityWebRequest.EscapeURL(state)}" +
- $"&cityCode={UnityWebRequest.EscapeURL(city)}" +
- $"&rankType={rankType}" +
- $"&count={count}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 获取自己的用户信息
- /// </summary>
- /// <param name="secret">密钥</param>
- /// <param name="rankArea">排行区域 3:国,1:省,2市,其他:全球</param>
- /// <param name="country">国家</param>
- /// <param name="state">省</param>
- /// <param name="city">市</param>
- /// <param name="rankType">1是降序,其他是升序(不能小于0)</param>
- /// <param name="count">数量:不能小于0</param>
- /// <param name="callback"></param>
- public void GetUserRankByGameType(string secret, int rankArea, string country, string state, string city, int rankType, int count, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- string url = $"{serverURL}/SmartBowSDK/getUserRankByGameType?" +
- $"token={loginToken}" +
- $"&rankArea={rankArea}" +
- $"&secret={UnityWebRequest.EscapeURL(secret)}" +
- $"&countryCode={UnityWebRequest.EscapeURL(country)}" +
- $"&stateCode={UnityWebRequest.EscapeURL(state)}" +
- $"&cityCode={UnityWebRequest.EscapeURL(city)}" +
- $"&rankType={rankType}" +
- $"&count={count}";
- StartCoroutine(Post(url, new WWWForm(), callback));
- }
- /// <summary>
- /// 上传排行榜分数(定制)
- /// </summary>
- /// <param name="secret">密钥</param>
- /// <param name="taskId">任务类型</param>
- /// <param name="difficultType">难度</param>
- /// <param name="modeType">模式</param>
- /// <param name="deviceType">设备类型</param>
- /// <param name="score">分数(>=0)</param>
- /// <param name="callback">回调</param>
- public void UploadCustomLeaderboardScore(string secret, int taskId, int difficultType, int modeType, int deviceType, int score, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- if (score < 0)
- {
- callback?.Invoke(new RequestResult { msg = "分数不能小于0" });
- return;
- }
- string url = $"{serverURL}/SmartBowSDK/UploadCustomLeaderboardScore";
- WWWForm form = new WWWForm();
- form.AddField("token", loginToken);
- form.AddField("secret", secret);
- form.AddField("taskId", taskId);
- form.AddField("difficultType", difficultType);
- form.AddField("modeType", modeType);
- form.AddField("deviceType", deviceType);
- form.AddField("score", score);
- StartCoroutine(Post(url, form, callback));
- }
- /// <summary>
- /// 获取排行榜(自定义)
- /// </summary>
- /// <param name="secret">密钥</param>
- /// <param name="taskId">任务类型</param>
- /// <param name="difficultType">难度</param>
- /// <param name="modeType">模式</param>
- /// <param name="deviceType">设备类型</param>
- /// <param name="timeType">时间维度</param>
- /// <param name="callback">回调</param>
- public void GetCustomLeaderboard(string secret, int taskId, int difficultType, int modeType, int deviceType, int timeType, Action<RequestResult> callback)
- {
- if (loginToken == null)
- {
- callback?.Invoke(new RequestResult { msg = "尚未登录" });
- return;
- }
- string url = $"{serverURL}/SmartBowSDK/GetCustomLeaderboard";
- WWWForm form = new WWWForm();
- form.AddField("token", loginToken);
- form.AddField("secret", secret);
- form.AddField("taskId", taskId);
- form.AddField("difficultType", difficultType);
- form.AddField("modeType", modeType);
- form.AddField("deviceType", deviceType);
- form.AddField("timeType", timeType);
- StartCoroutine(Post(url, form, callback));
- }
- private string GetCalibrateDataStorageLocalKey(string mac)
- {
- string key = "CalibrateDataStorage";
- string version = "1.0.0";
- return key + "_" + mac + "_" + version;
- }
- internal void SaveCalibrateRecord(string mac, string record)
- {
- if (smartBowHelper.calibrateDataStorageMode == CalibrateDataStorageMode.Local)
- {
- PlayerPrefs.SetString(GetCalibrateDataStorageLocalKey(mac), record == null ? "" : record);
- }
- else if (smartBowHelper.calibrateDataStorageMode == CalibrateDataStorageMode.Remote)
- {
- WWWForm form = new WWWForm();
- form.AddField("mac", mac);
- form.AddField("record", record);
- StartCoroutine(Post(serverURL + "/SmartBowSDK/saveCalibrateRecord", form, null));
- }
- }
- internal void GetCalibrateRecord(string mac, Action<string> callback)
- {
- if (smartBowHelper.calibrateDataStorageMode == CalibrateDataStorageMode.Local)
- {
- callback?.Invoke(PlayerPrefs.GetString(GetCalibrateDataStorageLocalKey(mac), ""));
- }
- else if (smartBowHelper.calibrateDataStorageMode == CalibrateDataStorageMode.Remote)
- {
- WWWForm form = new WWWForm();
- form.AddField("mac", mac);
- StartCoroutine(Post(serverURL + "/SmartBowSDK/getCalibrateRecord", form, (res) =>
- {
- if (res.code == 0) callback?.Invoke(res.data as string);
- }));
- }
- }
- public static IEnumerator Post(string url, WWWForm form, Action<RequestResult> callback)
- {
- using (UnityWebRequest request = UnityWebRequest.Post(url, form))
- {
- yield return request.SendWebRequest();
- if (request.result == UnityWebRequest.Result.Success)
- callback?.Invoke(JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text));
- else
- callback?.Invoke(new RequestResult());
- }
- }
- public static IEnumerator LoadSprite(string url, Action<Sprite> callback)
- {
- using (UnityWebRequest uwr = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET))
- {
- uwr.downloadHandler = new DownloadHandlerTexture();
- yield return uwr.SendWebRequest();
- if (uwr.result != UnityWebRequest.Result.Success) yield break;
- Texture2D texture = DownloadHandlerTexture.GetContent(uwr);
- Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
- callback?.Invoke(sprite);
- }
- }
- private IEnumerator SendRequest(UnityWebRequest request, Action<RequestResult> callback)
- {
- yield return request.SendWebRequest();
- if (request.result == UnityWebRequest.Result.Success)
- callback?.Invoke(JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text));
- else
- callback?.Invoke(new RequestResult());
- }
- }
- public class RequestResult
- {
- public int code = -9999;
- public object data;
- public string msg = "网络出错";
- }
- public class LoginResult
- {
- /// <summary>
- /// 是否登录成功
- /// </summary>
- public bool success;
- /// <summary>
- /// 消息描述
- /// </summary>
- public string message;
- }
- public class GetUserInfoResult
- {
- /// <summary>
- /// 是否获取成功
- /// </summary>
- public bool success;
- /// <summary>
- /// 消息描述
- /// </summary>
- public string message;
- /// <summary>
- /// 用户信息
- /// </summary>
- public UserInfo userInfo;
- }
- public class UserInfo
- {
- /// <summary>
- /// 昵称
- /// </summary>
- public string nickname;
- /// <summary>
- /// 头像地址
- /// </summary>
- public string avatarUrl;
- /// <summary>
- /// 性别(1表示男,2表示女)
- /// </summary>
- public int gender;
- }
- /// <summary>
- /// 用户数据
- /// </summary>
- public class UserInfoExtended
- {
- /// <summary>
- /// //头像url
- /// </summary>
- public string avatarUrl;
- /// <summary>
- /// //名字
- /// </summary>
- public string nickname;
- /// <summary>
- /// //性别 1 男,2女
- /// </summary>
- public int gender;
- /// <summary>
- /// 生日
- /// </summary>
- public string birthday;
- /// <summary>
- /// 国家
- /// </summary>
- public string country;
- /// <summary>
- /// 省
- /// </summary>
- public string state;
- /// <summary>
- /// 城市
- /// </summary>
- public string city;
- }
- }
|