using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class APIMenu : MonoBehaviour { #region User [Serializable] public class UserDetails { public int status; public string token; public Response[] response; } [Serializable] public class Response { public int IDMatricula; public string Nome; } #endregion #region Class [Serializable] public class Classes { public int status; public List response = new List(); } [Serializable] public class responseClass { public int idclasses, idcourses, disabled, ordem, viewed, sprites, demo; public string name, description; } #endregion #region Courses [Serializable] public class Courses { public int status; public List response = new List(); } [Serializable] public class responseCourses { public int IDCurso; public string NomeVersao; } #endregion #region Liberada [Serializable] public class AulasLiberadas { public int status; public responseLiberadas[] response; } [Serializable] public class responseLiberadas { public int qtde_presencas; public int IDCurso; } #endregion string route = "zoe.myrobotlab.com.br"; bool gotRoute = false; public bool LicaoDeCasa = true; public static bool licaodecasa; public List classesStorage = new List(); public List coursesStorage = new List(); CacheController cc; public bool fullSync = false; IEnumerator GetRoute() { yield return new WaitForEndOfFrame(); while (!ReadingFile.instance.canGo) { yield return new WaitForEndOfFrame(); } route = ReadingFile.route; yield return new WaitForEndOfFrame(); gotRoute = true; yield break; } private void Awake() { cc = GetComponent(); licaodecasa = LicaoDeCasa; if (PlayerPrefs.HasKey("CurrentVersion")) { if (PlayerPrefs.GetString("CurrentVersion") != Application.version) { Debug.Log("Has to resync"); fullSync = true; PlayerPrefs.SetString("CurrentVersion", Application.version); } } else { Debug.Log("Has to resync"); fullSync = true; PlayerPrefs.SetString("CurrentVersion", Application.version); } VerifyCaches(); StartCoroutine(GetRoute()); } public class BypassCertificate : CertificateHandler { protected override bool ValidateCertificate(byte[] certificateData) { //Simply return true no matter what return true; } } public IEnumerator listClasses(string idCurso, string qntdChamadas) { ClassContents thisClass = new ClassContents(); thisClass.idClass = idCurso; bool useCache = false; for (int i = 0; i < classesStorage.Count; i++) { if (classesStorage[i].idClass == idCurso && classesStorage[i].isHomework == LicaoDeCasa) { thisClass.contentJson = classesStorage[i].contentJson; useCache = true; continue; } } while (!gotRoute) { yield return new WaitForEndOfFrame(); } string rotaCerta = "getClassEnByCourse"; if (ReadingFile.instance.userType == ReadingFile.UserType.Admin) { rotaCerta = "getClassEnByCourseAll"; Debug.Log(qntdChamadas); } if (!useCache) { using (UnityWebRequest www = UnityWebRequest.Get(route + "/api/classes/" + rotaCerta + "/" + idCurso + "/" + qntdChamadas + "/" + ((LicaoDeCasa) ? 1 : 0))) { www.certificateHandler = new BypassCertificate(); www.downloadHandler = new DownloadHandlerBuffer(); string token = PlayerPrefs.GetString("token"); www.SetRequestHeader("token", Uri.EscapeUriString(token)); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.LogError(www.error); yield return new WaitForSecondsRealtime(1); yield return StartCoroutine(listClasses(idCurso, qntdChamadas)); } else { string Json = www.downloadHandler.text; thisClass.contentJson = Json; Debug.Log(Json); Classes classess = JsonUtility.FromJson(Json); if (classess.response.Count <= 0) { responseClass fakeResponse = new responseClass(); fakeResponse.description = "No Class"; fakeResponse.disabled = 1; fakeResponse.idclasses = 0; fakeResponse.idcourses = 0; fakeResponse.name = "No class"; fakeResponse.ordem = 0; fakeResponse.viewed = 0; fakeResponse.sprites = 0; fakeResponse.demo = 0; classess.response.Add(fakeResponse); } // Mostrar apenas as aulas demonstrativas if (ReadingFile.instance.userType == ReadingFile.UserType.Demo) { List newResponseForDemo = new List(); for (int i = 0; i < classess.response.Count; i++) { if (classess.response[i].demo == 1) { newResponseForDemo.Add(classess.response[i]); } } //classess.response = new responseClass[newResponseForDemo.Count]; classess.response.AddRange(newResponseForDemo.ToArray()); } MenuController menu = MenuController.instance; menu.classes.Add(classess); classesStorage.Add(thisClass); Debug.Log("Added " + thisClass.ToString()); } } } else { string Json = thisClass.contentJson; Debug.Log(Json); Classes classess = JsonUtility.FromJson(Json); if (classess.response.Count <= 0) { responseClass fakeResponse = new responseClass(); fakeResponse.description = "No Class"; fakeResponse.disabled = 1; fakeResponse.idclasses = 0; fakeResponse.idcourses = 0; fakeResponse.name = "No class"; fakeResponse.ordem = 0; fakeResponse.viewed = 0; fakeResponse.sprites = 0; fakeResponse.demo = 0; classess.response.Add(fakeResponse); } // Mostrar apenas as aulas demonstrativas if (ReadingFile.instance.userType == ReadingFile.UserType.Demo) { List newResponseForDemo = new List(); for (int i = 0; i < classess.response.Count; i++) { if (classess.response[i].demo == 1) { newResponseForDemo.Add(classess.response[i]); } } //classess.response = new responseClass[newResponseForDemo.Count]; classess.response.AddRange(newResponseForDemo.ToArray()); } MenuController menu = MenuController.instance; menu.classes.Add(classess); } yield break; } public IEnumerator aulasLiberadas(string idaluno, string idcurso, string banco, string nomeCurso) { while (!gotRoute) { yield return new WaitForEndOfFrame(); } using (UnityWebRequest www = UnityWebRequest.Get(route + "/api/classes/getQtdeChamadas/" + idaluno + "/(" + idcurso + ")/" + banco)) { www.certificateHandler = new BypassCertificate(); www.downloadHandler = new DownloadHandlerBuffer(); string token = PlayerPrefs.GetString("token"); www.SetRequestHeader("token", Uri.EscapeUriString(token)); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.LogError(www.error); yield return new WaitForSecondsRealtime(1); yield return StartCoroutine(aulasLiberadas(idaluno, idcurso, banco, nomeCurso)); } else { string Json = www.downloadHandler.text; Json = Json.Replace(":[[{", ":[{"); Json = Json.Replace("}]]}", "}]}"); AulasLiberadas aulas = JsonUtility.FromJson(Json); int qtdPresencas = aulas?.response?.Length > 0 ? aulas.response[0].qtde_presencas : 0; MenuController menu = MenuController.instance; menu.allowedCourses.Add(idcurso); menu.allowedClasses.Add(qtdPresencas); Debug.Log("Quantidade de chamadas: " + aulas.response[0].qtde_presencas); menu.coursesName.Add(nomeCurso); } } yield break; } public IEnumerator listCourses(string idAluno, string banco) { while (!gotRoute) { yield return new WaitForEndOfFrame(); } string url = route + "/api/courses/"; if (ReadingFile.StudentUsers.Contains(ReadingFile.instance.userType)) url += "getRobotCourseByStudent/" + idAluno + "/" + banco; else url += "getRobotCourses"; using (UnityWebRequest www = UnityWebRequest.Get(url)) { www.certificateHandler = new BypassCertificate(); www.downloadHandler = new DownloadHandlerBuffer(); string token = PlayerPrefs.GetString("token"); www.SetRequestHeader("token", Uri.EscapeUriString(token)); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.LogError(www.error); yield return new WaitForSecondsRealtime(1); yield return StartCoroutine(listCourses(idAluno, banco)); } else { string Json = www.downloadHandler.text; Json = Json.Replace(":[[{", ":[{"); Json = Json.Replace("}]]}", "}]}"); Courses courses = JsonUtility.FromJson(Json); // responseCourses kids = new responseCourses(); // kids.IDCurso = 42; // kids.NomeVersao = "Kids Módulo 1"; // courses.response.Add(kids); if (ReadingFile.instance.userType != ReadingFile.UserType.Admin) { responseCourses extraClasses = new responseCourses(); extraClasses.IDCurso = 41; extraClasses.NomeVersao = "Aulas Extras"; courses.response.Add(extraClasses); } if (courses.status == 200) { for (int i = 0; i < courses.response.Count; i++) { yield return StartCoroutine(aulasLiberadas(ReadingFile.idmatricula, courses.response[i].IDCurso.ToString(), ReadingFile.banco, courses.response[i].NomeVersao)); } MenuController menu = MenuController.instance; menu.listedCourses = true; } else { yield return new WaitForSecondsRealtime(1); yield return StartCoroutine(listCourses(idAluno, banco)); } } } yield break; } public IEnumerator LogarAluno() { while (!gotRoute) { yield return new WaitForEndOfFrame(); } WWWForm form = new WWWForm(); form.AddField("type", 4); form.AddField("password", ReadingFile.senha); form.AddField("login", ReadingFile.idmatricula); form.AddField("db", ReadingFile.banco); using (UnityWebRequest www = UnityWebRequest.Post(route + "/api/users/authUser", form)) { www.certificateHandler = new BypassCertificate(); www.downloadHandler = new DownloadHandlerBuffer(); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { //errorInOpen.text = www.downloadHandler.text; //errorInOpen.text = www.responseCode.ToString(); string Json = www.downloadHandler.text; Json = Json.Replace("[[{", "[{"); Json = Json.Replace("}]]", "}]"); UserDetails userdet = JsonUtility.FromJson(Json); if (userdet.status == 200) { PlayerPrefs.SetString("token", userdet.token); } else { } } } } public void UpdateClasses() { } public void VerifyCaches() { if (!fullSync) { if (cc.HasFile("ClassLists.txt")) { classesStorage = cc.LoadCache("ClassLists.txt"); } if (cc.HasFile("CoursesList.txt")) { coursesStorage = cc.LoadCache("CoursesList.txt"); } } else { } } public void FinishedLoading() { cc.SaveCache(classesStorage, "ClassLists.txt"); cc.SaveCache(coursesStorage, "CoursesList.txt"); if (fullSync) { fullSync = false; } } }