IEnumerator Send_Post_Coroutine(string[] field_name, string[] field_value, Action <string, Handler_Type> concludingMethod, bool add_user_credentials, Handler_Type type) { WWWForm form = new WWWForm(); form.AddField("API_USER", "USER"); form.AddField("API_PASSWORD", "8420b25f4c1ad7ac906364ee943a7bef"); form.AddField("db_username", "dbu14967"); form.AddField("db_password", "DrTgcePl06K#"); if (add_user_credentials) { form.AddField("username", User.User_Info.Username); form.AddField("psswd", User.Psswd); } for (int x = 0; x < field_name.Length; x++) { form.AddField(field_name[x], field_value[x]); } using (UnityWebRequest www = UnityWebRequest.Post(API_URL, form)) { yield return(www.SendWebRequest()); if (www.isNetworkError) { string error = www.error; if (error == "Cannot resolve destination host") { error = "No estás conectad@ a internet."; } Message.ShowMessage(error); Debug.LogWarning(error); Scroll_Updater.Disable(); Login.Singleton.On_Load_Failure(); } else { StringBuilder sb = new StringBuilder(); foreach (KeyValuePair <string, string> dict in www.GetResponseHeaders()) { sb.Append(dict.Key).Append(": \t[").Append(dict.Value).Append("]\n"); } string response_header = sb.ToString(); string response_content = www.downloadHandler.text; Debug.Log(response_content); concludingMethod(response_content, type); } } }
// ______________________________________ // // 4. PARSE DATA. // ______________________________________ // /// <summary> /// Parses a database gotten from the device's cache or from a server's response. /// </summary> /// <param name="data_to_parse">Data from cache or server to parse.</param> /// <param name="save">If data_to_parse should be saved on the device's cache.</param> /// <param name="handler_type">The child class type of Database_Handler that is going to parse data_to_parse.</param> static void Parse_Data(string data_to_parse, bool save, Handler_Type handler_type) { if (!Is_Clean(data_to_parse)) { Message.ShowMessage("Error interno del servidor."); return; } Func <string, Data_struct> Parse_Data_Single = null; Func <List <Data_struct> > Sort_List = null; Type type = null; switch (handler_type) { case Handler_Type.news: Parse_Data_Single = News.Parse_Single_Data; type = typeof(News); Sort_List = News.Sort_List; break; case Handler_Type.polls: Parse_Data_Single = Polls.Parse_Single_Data; type = typeof(Polls); Sort_List = Polls.Sort_List; break; case Handler_Type.events: Parse_Data_Single = Calendar_Events.Parse_Single_Data; type = typeof(Calendar_Events); Sort_List = Calendar_Events.Sort_List; break; case Handler_Type.docs: Parse_Data_Single = Docs.Parse_Single_Data; type = typeof(Docs); break; } List <Data_struct> data_list = new List <Data_struct>(); if (save) { Save_Database(handler_type.ToString() + "_database", data_to_parse); } // Separate news database from initial server information. (E.g. "VERIFIED.|*databases*|") string data = Utils.Split(data_to_parse, '~')[1]; // Separate each row to parse it individually. (E.g. "*row*%*row*") if (Encryption.Has_Valid_Key()) { foreach (string element in Utils.Split(data, "%")) { data_list.Add(Parse_Data_Single(element)); } } Data_List_Set(type, data_list); if (Singleton != null) { Singleton.enabled = true; } Sort_List?.Invoke(); Scroll_Updater.Disable(); if (Menu.Active_Item == Menu.Menu_item.Home) { foreach (Scrollable scrollable in FindObjectsOfType <Scrollable>()) { scrollable.Initialize(); } } Post_Parse(handler_type); }