//Log Dir http://docs.unity3d.com/Manual/LogFiles.html // requisiçao http get no unity // vlibras.lavid.ufpb.br:5000/glosa?texto=CASA%LAVID%123 using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using System.IO; using System.Text; using System.Runtime.InteropServices; using UnityEngine.UI; using System.Threading; using System.Net; using Utils; public class PlayerManager : GenericPlayerManager { #if UNITY_IOS //private const string BASE_URL = "http://150.165.205.9/anims/IOS/";//old private const string BASE_URL = "http://dicionario.vlibras.gov.br/IOS/"; #else //private const string BASE_URL = "http://150.165.205.9/anims/ANDROID/";//old private const string BASE_URL = "http://dicionario.vlibras.gov.br/ANDROID/"; #endif //private const string SERVER_URL = "http://vlibras.lavid.ufpb.br/glosa?texto=";//old private const string SERVER_URL = "http://traducao.vlibras.gov.br/translate?text="; private const int VERSION = 1; public enum ERROR_STATUS_MESSAGE { INTERNET_CONNECTION_FAILURE, TRANSLATOR_CONNECTION_FAILURE, CONNECTION_TIMEOUT_FAILURE } private string[] randomAnimationNames = new string[] { "[RELAXAR]", "[BOCEJAR]", "[COCHILAR]", "[ESPREGUI_ADA]" }; protected VoiceRecognition voiceRecognizer; public InputField translateScreenText; public ScreenManager screenManager; private string dictWord = null; private string regionPath = ""; private int regionHash = 1; public static string get_connection_status_message(ERROR_STATUS_MESSAGE msg) { switch(msg) { case ERROR_STATUS_MESSAGE.TRANSLATOR_CONNECTION_FAILURE: return "Problema na conexão. Usaremos português sinalizado e datilologia."; case ERROR_STATUS_MESSAGE.INTERNET_CONNECTION_FAILURE: return "Não há acesso à internet. Usaremos português sinalizado e datilologia."; case ERROR_STATUS_MESSAGE.CONNECTION_TIMEOUT_FAILURE: return "Não há acesso à internet. Usaremos português sinalizado e datilologia."; //return "A conexão está lenta. Usaremos português sinalizado e datilologia."; default: return "Ocorreu um erro. Estamos trabalhando para solucioná-lo!"; } } public override void Start() { base.setRandomAnimations(randomAnimationNames); base.Start(); voiceRecognizer = new VoiceRecognition(); #if UNITY_EDITOR Caching.CleanCache(); #endif Screen.fullScreen = false; // Hide input text preview // TouchScreenKeyboard.hideInput = true; } public void playDict(string word) { Logger.Log("Requesting dictionary: " + word); this.dictWord = word; base.gloss = word; base.playNow(word); this.screenManager.hideScreen(); this.screenManager.setPauseMenuState(false); } public void playTranslate() { stopTranslation(); string text = translateScreenText.text; translateScreenText.text = ""; StartCoroutine("translate", text); this.screenManager.setPauseMenuState(false); } public void stopTranslation() { StopCoroutine("translate"); this.randomAnimations.unlockFor("translate"); } public void catchTranslationError() { this.randomAnimations.unlockFor("translate"); base.repeat(); } public void setRegion(string path) { this.regionPath = String.IsNullOrEmpty(path) ? "" : path; this.regionHash = this.regionPath == "" ? 1 : (int)this.regionPath[0] * 255 + (int)this.regionPath[1]; } public void clearRegion() { setRegion(""); } protected override WWW loadAssetBundle(string aniName) { Logger.Log("Requesting bundle: " + BASE_URL + regionPath + aniName); return WWW.LoadFromCacheOrDownload(BASE_URL + regionPath + aniName, this.regionHash); } private System.Object LOCKER_STATE = new System.Object(); protected override void onPlayingStateChange() { lock (LOCKER_STATE) { this.screenManager.changeStates(base.isPlaying(), base.isPaused(), ! String.IsNullOrEmpty(base.gloss)); } } protected override void onConnectionError(string gloss, string word) { if (gloss.Equals(this.dictWord)) { base.stopAll(); this.screenManager.showConnectionErrorDialog( PlayerManager.ERROR_STATUS_MESSAGE.INTERNET_CONNECTION_FAILURE); } } // Called from microphone icon at main interface public void callVoiceRecognizer() { Logger.Log("Requesting voice recognizer"); string gloss = voiceRecognizer.callRecognition(); this.translateScreenText.text = gloss; Logger.Log("Voice recognizer answer: " + gloss); this.screenManager.switchScreen("translate"); } protected override WWW getCheckConnectionRequest() { return new WWW(BASE_URL); /*WWW connection = new WWW(SERVER_URL); yield return connection; //while (!glossRequest.isDone) if (connection.error == null) { if (connection.responseHeaders.Count > 0) Logger.Log(connection.responseHeaders["STATUS"]); else Logger.Log("No STATUS"); } else Logger.Log("ERROR: " + connection.error); return false;*/ /*HttpWebRequest request = (HttpWebRequest)WebRequest.Create(BASE_URL); request.Method = "HEAD"; request.Timeout = 2000; try { HttpWebResponse response = (HttpWebResponse) request.GetResponse(); } catch (WebException e) { if (e.Response != null) { Logger.Log(((HttpWebResponse)e.Response).StatusCode); return ((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.NotFound; } } catch (Exception) { } return false;*/ } private IEnumerator translate(string gloss) { bool returnSuccess = true; bool timeout = false; Logger.Log("Requesting translator: " + gloss); base.randomAnimations.lockFor("translate"); this.screenManager.setLoadingSnippetState(true); WWW glossRequest = new WWW(SERVER_URL + WWW.EscapeURL(gloss)); Logger.Log("Translate: Request: " + SERVER_URL + WWW.EscapeURL(gloss)); if (glossRequest != null) { const float timeoutLimit = 10f; float timer = 0; Logger.Log("Translate: Stating time check."); while (!glossRequest.isDone) { if (timer > timeoutLimit) { timeout = true; break; } timer += Time.deltaTime; yield return null; } Logger.Log("Translate: Timeout check finished."); if (!timeout) { if (glossRequest.error == null) { Logger.Log("Translate: Request: count=" + glossRequest.responseHeaders.Count + ", status=" + glossRequest.responseHeaders["STATUS"]); returnSuccess = glossRequest.responseHeaders.Count > 0 && glossRequest.responseHeaders["STATUS"].EndsWith("200 OK"); if (returnSuccess) { if (!String.IsNullOrEmpty(glossRequest.text)) { Logger.Log("Translator answer: " + glossRequest.text); base.gloss = glossRequest.text; base.playNow(glossRequest.text); this.screenManager.setLoadingSnippetState(false); base.randomAnimations.unlockFor("translate"); yield break; } else Logger.Log("Error at PlayerManager.translate: empty answer."); } else Logger.Log("Error at PlayerManager.translate: unsuccessful answer."); } else Logger.Log("Error at PlayerManager.translate: (WWW) glosaRequest: " + glossRequest.error); } else Logger.Log("Error at PlayerManager.translate: timeout."); } else Logger.Log ("Error at PlayerManager.translate: (WWW) glosaRequest is NULL."); base.gloss = gloss.ToUpper(); this.screenManager.setLoadingSnippetState(false); base.randomAnimations.unlockFor("translate"); if (returnSuccess) { this.screenManager.showConnectionErrorDialog( PlayerManager.ERROR_STATUS_MESSAGE.TRANSLATOR_CONNECTION_FAILURE); } else if (timeout) { this.screenManager.showConnectionErrorDialog( PlayerManager.ERROR_STATUS_MESSAGE.CONNECTION_TIMEOUT_FAILURE); } else { this.screenManager.showConnectionErrorDialog( PlayerManager.ERROR_STATUS_MESSAGE.INTERNET_CONNECTION_FAILURE); } } }