using System; using System.Collections; using System.Collections.Generic; using SimpleJSON; using UnityEngine; using UnityEngine.Networking; [Serializable] public class ErrorResponse { public int status; public Dictionary data; public string message; } public enum ErrorType { None, Authentication, Network, Server, Unknown } public class webservice : MonoBehaviour { public static webservice instance; public string lastError; // Store the last error message public ErrorResponse lastErrorResponse; public ErrorType lastErrorType; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { instance = this; } public IEnumerator LoginRequest(Dictionary formData, Action onComplete) { string url = "http://194.62.43.230:8000/login"; lastError = null; lastErrorResponse = null; lastErrorType = ErrorType.None; WWWForm form = new WWWForm(); String par = ""; foreach (KeyValuePair entry in formData) { par += entry.Key + "=" + entry.Value; form.AddField(entry.Key, entry.Value); } print(url+"?"+par); using (UnityWebRequest www = UnityWebRequest.Post(url, form)) { yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { print("Response: " + www.downloadHandler.text); PlayerPrefs.SetString("user", www.downloadHandler.text); User response = new User(www.downloadHandler.text); onComplete?.Invoke(response); } else { try { lastErrorResponse = JsonUtility.FromJson(www.downloadHandler.text); lastError = lastErrorResponse.message; if (lastErrorResponse.status >= 400 && lastErrorResponse.status < 500) { lastErrorType = ErrorType.Authentication; lastError = "خطا در احراز هویت: " + lastErrorResponse.message; } else if (lastErrorResponse.status >= 500) { lastErrorType = ErrorType.Server; lastError = "خطای سرور: " + lastErrorResponse.message; } else { lastErrorType = ErrorType.Unknown; lastError = "خطای ناشناخته: " + lastErrorResponse.message; } Debug.LogError($"خطای API: وضعیت={lastErrorResponse.status}, پیام={lastErrorResponse.message}, نوع={lastErrorType}"); } catch (Exception e) { lastError = www.error; if (www.error.Contains("NetworkError") || www.error.Contains("ConnectionError") || www.error.Contains("Cannot connect")) { lastErrorType = ErrorType.Network; lastError = "خطای اتصال به اینترنت"; } else { lastErrorType = ErrorType.Unknown; lastError = "خطای ناشناخته در ارتباط با سرور"; } Debug.LogError($"خطای شبکه: {www.error}, نوع={lastErrorType}"); } onComplete?.Invoke(null); } } } public IEnumerator GetInfoRequest(Action onComplete) { string url = "http://194.62.43.230:8000/getInfo"; lastError = null; lastErrorResponse = null; UnityWebRequest www = UnityWebRequest.Get(url); www.SetRequestHeader("Authorization", "token "+EN.instance.Me.token); yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { Debug.Log("Response: " + www.downloadHandler.text); GetInfoResponse response = JsonUtility.FromJson(www.downloadHandler.text); onComplete?.Invoke(response); } else { try { lastErrorResponse = JsonUtility.FromJson(www.downloadHandler.text); lastError = lastErrorResponse.message; Debug.LogError($"API Error: Status={lastErrorResponse.status}, Message={lastErrorResponse.message}"); } catch (Exception e) { lastError = www.error; Debug.LogError($"Network Error: {www.error}"); } onComplete?.Invoke(null); } } } [System.Serializable] public class GetInfoResponse { public Customer customer; public User user; public List images; public List pdfs; public List videos; public List glbs; } [System.Serializable] public class Customer { public int id; public int user; public int user_id; public string mobile_number; public string profile_img; public string profile_glb; public bool is_sms_verified; public bool is_email_verified; } [System.Serializable] public class ImageData { public int id; public string url; public string image; public string name; public string created_at; } [System.Serializable] public class PdfData { public int id; public string url; public string pdf; public string name; public string created_at; } [System.Serializable] public class VideoData { public int id; public string url; public string video; public string name; public string created_at; } [System.Serializable] public class GlbData { public int id; public string url; public string glb; public string name; public string created_at; } [Serializable] public class User { public int id; public string token; public string first_name; public string last_name; public string job; public GameObject character; private string user; public User() { } public User(string j) { if(EN.instance) EN.instance.Print(j); var json = JSON.Parse(j); User response = this; response.token = json["token"]; response.id = json["user"]["id"].AsInt; response.first_name = json["user"]["first_name"]; response.last_name = json["user"]["last_name"]; EN.instance.Print(response.last_name); } }