// Conecta ao servidor assincronamente public override IEnumerator startConnection(string id, WWWForm form = null, object state = null, bool redo = true) { // Se for uma conexao permanente, marca o seu inicio if (persistent) { GamePersistentConnection.started(id); } // Salva o formulario passado caso necessario byte[] form_data; Hashtable headers; if (persistent && form != null) { form_data = form.data; headers = form.headers; } else { form_data = null; headers = null; } // Cria a conexao float start = Time.realtimeSinceStartup; //Debug.Log("Time now: " + start); WWW conn = setUpConnection(form, !redo); yield return(conn); if (persistent) { yield return(conn); } else { while (!conn.isDone) { if (Time.realtimeSinceStartup - start > CONNECTION_TIMEOUT) { string url = conn.url; conn.Dispose(); Debug.Log("Timeout after: " + (Time.realtimeSinceStartup - start)); sendToCallbackPersistent(DEFAULT_ERROR_MESSAGE, null, state, id, url, null, null); yield break; } yield return(new WaitForEndOfFrame()); } } //Debug.Log("Time after: " + Time.realtimeSinceStartup); //Debug.Log("Time passed: " + (Time.realtimeSinceStartup - start)); handleConnection(conn, id, state, form_data, headers); }
// Chama o callback com os dados protected void sendToCallbackPersistent(string error, T data, object state, string id, string url, byte[] form_data, Hashtable headers) { // Verifica se e necessario repetir a conexao if (persistent) { if (error != null) { GamePersistentConnection.addConnection(id, url, form_data, headers); } else { GamePersistentConnection.finished(id); } } // Envia ao callback sendToCallback(error, data, state); }