149 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System.Collections; | |||
|  | using System.Collections.Generic; | |||
|  | using UnityEngine; | |||
|  | using UnityEngine.Networking; | |||
|  | 
 | |||
|  | namespace ES3Internal | |||
|  | { | |||
|  | 	public class ES3WebClass | |||
|  | 	{ | |||
|  | 		protected string url; | |||
|  | 		protected string apiKey; | |||
|  | 
 | |||
|  | 		protected List<KeyValuePair<string,string>> formData = new List<KeyValuePair<string, string>>(); | |||
|  | 		protected UnityWebRequest _webRequest = null; | |||
|  | 
 | |||
|  | 
 | |||
|  | 		public bool isDone = false; | |||
|  | 		public float uploadProgress | |||
|  | 		{ | |||
|  | 			get | |||
|  | 			{  | |||
|  | 				if(_webRequest == null) | |||
|  | 					return 0; | |||
|  | 				else | |||
|  | 					return _webRequest.uploadProgress; | |||
|  | 			} | |||
|  | 		} | |||
|  | 
 | |||
|  | 		public float downloadProgress | |||
|  | 		{ | |||
|  | 			get | |||
|  | 			{  | |||
|  | 				if(_webRequest == null) | |||
|  | 					return 0; | |||
|  | 				else | |||
|  | 					return _webRequest.downloadProgress; | |||
|  | 			} | |||
|  | 		} | |||
|  | 
 | |||
|  | 		#region Error Handling | |||
|  | 
 | |||
|  | 		/// <summary>An error message, if an error occurred.</summary> | |||
|  | 		public string error = null; | |||
|  | 		/// <summary>This is set to true if an error occurred while performing an operation.</summary> | |||
|  | 		public bool isError{ get{ return !string.IsNullOrEmpty(error) || errorCode > 0; } } | |||
|  | 		/// <summary>The error code relating to the error, if one occurred. If it's a server error, this will return the HTTP error code.</summary> | |||
|  | 		public long errorCode = 0; | |||
|  | 
 | |||
|  |         public static bool IsNetworkError(UnityWebRequest www) | |||
|  |         { | |||
|  | #if UNITY_2020_1_OR_NEWER | |||
|  |             return www.result == UnityWebRequest.Result.ConnectionError; | |||
|  | #else | |||
|  |             return www.isNetworkError; | |||
|  | #endif | |||
|  |         } | |||
|  | 
 | |||
|  | #endregion | |||
|  | 
 | |||
|  | 		protected ES3WebClass(string url, string apiKey) | |||
|  | 		{ | |||
|  | 			this.url = url; | |||
|  | 			this.apiKey = apiKey; | |||
|  | 		} | |||
|  | 
 | |||
|  | #region Other Methods | |||
|  | 
 | |||
|  | 		/// <summary>Adds POST data to any requests sent by this ES3Cloud object. Use this if you are sending data to a custom script on your server.</summary> | |||
|  | 		/// <param name="fieldName">The name of the POST field we want to add.</param> | |||
|  | 		/// <param name="value">The string value of the POST field we want to add.</param> | |||
|  | 		public void AddPOSTField(string fieldName, string value) | |||
|  | 		{ | |||
|  | 			formData.Add(new KeyValuePair<string, string>(fieldName, value)); | |||
|  | 		} | |||
|  | 
 | |||
|  | #endregion | |||
|  | 
 | |||
|  | #region Internal Methods | |||
|  | 
 | |||
|  | 		protected string GetUser(string user, string password) | |||
|  | 		{ | |||
|  | 			if(string.IsNullOrEmpty(user)) | |||
|  | 				return ""; | |||
|  | 			// Final user string is a combination of the username and password, and hashed if encryption is enabled. | |||
|  | 			if(!string.IsNullOrEmpty(password)) | |||
|  | 				user += password; | |||
|  | 
 | |||
|  | #if !DISABLE_ENCRYPTION && !DISABLE_HASHING | |||
|  | 			user = ES3Internal.ES3Hash.SHA1Hash(user); | |||
|  | #endif | |||
|  | 			return user; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		protected WWWForm CreateWWWForm() | |||
|  | 		{ | |||
|  | 			var form = new WWWForm(); | |||
|  | 			foreach(var kvp in formData) | |||
|  | 				form.AddField(kvp.Key, kvp.Value); | |||
|  | 			return form; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		/* Checks if an error occurred and sets relevant details, and returns true if an error did occur */ | |||
|  | 		protected bool HandleError(UnityWebRequest webRequest, bool errorIfDataIsDownloaded) | |||
|  | 		{ | |||
|  | 			if(IsNetworkError(webRequest)) | |||
|  | 			{ | |||
|  | 				errorCode = 1; | |||
|  | 				error = "Error: " + webRequest.error; | |||
|  | 			} | |||
|  | 			else if(webRequest.responseCode >= 400) | |||
|  | 			{ | |||
|  | 				errorCode = webRequest.responseCode; | |||
|  | 				if(string.IsNullOrEmpty(webRequest.downloadHandler.text)) | |||
|  | 					error = string.Format("Server returned {0} error with no message", webRequest.responseCode); | |||
|  | 				else | |||
|  | 					error = webRequest.downloadHandler.text; | |||
|  | 			} | |||
|  | 			else if(errorIfDataIsDownloaded && webRequest.downloadedBytes > 0) | |||
|  | 			{ | |||
|  | 				errorCode = 2; | |||
|  | 				error = "Server error: " + webRequest.downloadHandler.text; | |||
|  | 			} | |||
|  | 			else | |||
|  | 				return false; | |||
|  | 			return true; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		protected IEnumerator SendWebRequest(UnityWebRequest webRequest) | |||
|  | 		{ | |||
|  | 			_webRequest = webRequest; | |||
|  | #if !UNITY_2017_2_OR_NEWER | |||
|  | 			yield return webRequest.Send(); | |||
|  | #else | |||
|  | 			yield return webRequest.SendWebRequest(); | |||
|  | #endif | |||
|  | 		} | |||
|  | 
 | |||
|  | 		protected virtual void Reset() | |||
|  | 		{ | |||
|  | 			error = null; | |||
|  | 			errorCode = 0; | |||
|  | 			isDone = false; | |||
|  | 		} | |||
|  | 
 | |||
|  | 
 | |||
|  | #endregion | |||
|  | 	} | |||
|  | } |