// 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);
    }
예제 #2
0
    // 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);
    }