IEnumerator setPropio()
    {
        //Jugador(string nombre, string banner, string avatar, string ficha, int posicion, string[] quesitos)
        string nombre = UserDataScript.getInfo("username");
        string banner = UserDataScript.getInfo("banner");
        string avatar = UserDataScript.getInfo("avatar");
        string ficha  = UserDataScript.getInfo("token");

        PlayersDataScript.Jugador jugador = new PlayersDataScript.Jugador(nombre, banner, avatar, ficha, 777, new string[] { });
        PlayersDataScript.nuevoJugador(jugador);


        GameObject usuarioGO = new GameObject(nombre);

        usuarioGO.transform.SetParent(Usuarios.transform);

        RectTransform usuarioRT = usuarioGO.AddComponent <RectTransform>();

        usuarioRT.sizeDelta  = new Vector2(450, 51);
        usuarioRT.localScale = new Vector3(1, 1, 1);

        Text usuarioText = usuarioGO.AddComponent <Text>();

        usuarioText.text      = nombre;
        usuarioText.font      = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
        usuarioText.alignment = TextAnchor.MiddleLeft;
        usuarioText.fontSize  = 36;
        usuarioText.fontStyle = FontStyle.Bold;

        jugadores++;

        yield return(null);
    }
    IEnumerator salidaUsuario(string nombre)
    {
        PlayersDataScript.eliminarJugador(nombre);
        jugadores--;
        GameObject child = Usuarios.transform.Find(nombre).gameObject;

        Destroy(child);

        yield return(null);
    }
    IEnumerator estadoPartida(JObject data)
    {
        JArray jugadores = (JArray)data.Property("jugadores").Value;

        foreach (JToken j in jugadores)
        {
            JObject jugadorJO = (JObject)j;

            JValue tmp    = (JValue)jugadorJO.Property("usuario").Value;
            string nombre = (string)tmp.Value;

            tmp = (JValue)jugadorJO.Property("casilla").Value;
            long posLong  = (long)tmp.Value;
            int  posicion = unchecked ((int)posLong);

            string avatar = "avatar0", banner = "banner0", ficha = "ficha0";

            Debug.Log(jugadorJO);
            if (jugadorJO.Property("imgs").Value.Type != JTokenType.Null)
            {
                JObject images = (JObject)jugadorJO.Property("imgs").Value;


                tmp    = (JValue)images.Property("avatar").Value;
                avatar = (string)tmp.Value;
                tmp    = (JValue)images.Property("banner").Value;
                banner = (string)tmp.Value;
                tmp    = (JValue)images.Property("ficha").Value;
                ficha  = (string)tmp.Value;
            }

            JArray        quesitosJA = (JArray)jugadorJO.Property("quesitos").Value;
            List <string> quesitos   = new List <string> {
            };
            foreach (JToken q in quesitosJA)
            {
                string queso = (string)((JValue)q).Value;
                quesitos.Add(queso);
            }

            //Jugador(string nombre, string banner, string avatar, string ficha, int posicion, string[] quesitos)
            PlayersDataScript.Jugador jugador = new PlayersDataScript.Jugador(nombre, banner, avatar, ficha, posicion, quesitos.ToArray());
            PlayersDataScript.nuevoJugador(jugador);
        }
        PlayersDataScript.turno = "";
        setPlayersAtStart();
        yield return(null);
    }
    void setUsuario(JObject usuario, string fieldName)
    {
        Debug.Log("Nuevo Usuario: " + usuario);
        JValue tmp    = (JValue)usuario.Property(fieldName).Value;
        string nombre = (string)tmp.Value;

        string avatar = "avatar0", banner = "banner0", ficha = "ficha0";

        if (usuario.Property("imgs").Value.Type != JTokenType.Null)
        {
            JObject images = (JObject)usuario.Property("imgs").Value;

            tmp    = (JValue)images.Property("avatar").Value;
            avatar = (string)tmp.Value;
            tmp    = (JValue)images.Property("banner").Value;
            banner = (string)tmp.Value;
            tmp    = (JValue)images.Property("ficha").Value;
            ficha  = (string)tmp.Value;
        }

        //Jugador(string nombre, string banner, string avatar, string ficha, int posicion, string[] quesitos)
        PlayersDataScript.Jugador jugador = new PlayersDataScript.Jugador(nombre, banner, avatar, ficha, 777, new string[] { });
        PlayersDataScript.nuevoJugador(jugador);


        GameObject usuarioGO = new GameObject(nombre);

        usuarioGO.transform.SetParent(Usuarios.transform);

        RectTransform usuarioRT = usuarioGO.AddComponent <RectTransform>();

        usuarioRT.sizeDelta  = new Vector2(450, 51);
        usuarioRT.localScale = new Vector3(1, 1, 1);

        Text usuarioText = usuarioGO.AddComponent <Text>();

        usuarioText.text      = nombre;
        usuarioText.font      = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
        usuarioText.alignment = TextAnchor.MiddleLeft;
        usuarioText.fontSize  = 36;
        usuarioText.fontStyle = FontStyle.Bold;

        jugadores++;
    }
    IEnumerator jugada(JObject data)
    {
        Debug.Log("JUGADA: " + data);
        JValue userJV    = (JValue)data.Property("user").Value;
        JValue casillaJV = (JValue)data.Property("casilla").Value;
        JValue quesJV    = (JValue)data.Property("ques").Value;

        string user        = (string)userJV.Value;
        long   casillaLong = (long)casillaJV.Value;
        int    casilla     = unchecked ((int)casillaLong);
        string ques        = (string)quesJV.Value;

        //Actualizar quesito
        PlayersDataScript.jugadores[PlayersDataScript.index(user)].quesitos.Add(ques);
        int idx = Array.FindIndex(categories, (c) => { return(c.Equals(ques)); });

        PlayersGO.transform.Find(user).GetComponentsInChildren <Image>(true)[3 + idx].gameObject.SetActive(true);

        //Mover ficha del jugador
        PlayersDataScript.jugadores[PlayersDataScript.index(user)].posicion = casilla;
        setTokenInPosition(TokensGO.transform.Find(user).gameObject, casilla);

        yield return(null);
    }
    public static bool Start(Action fnConexion, Action fnEnd, Dictionary <string, Action <object> > handlers)
    {
        if (handlers.Count == 0)
        {
            return(false);
        }

        Debug.Log("Comienza initSocketio()");
        try
        {
            IO.Options opciones = new IO.Options();
            opciones.ExtraHeaders.Add("jwt", UserDataScript.getInfo("token"));
            opciones.ExtraHeaders.Add("operacion", op);

            foreach (KeyValuePair <string, string> entry in args)
            {
                opciones.ExtraHeaders.Add(entry.Key, entry.Value);
            }

            socket = IO.Socket(ENDPOINT, opciones);

            foreach (KeyValuePair <string, Action <object> > entry in handlers)
            {
                socket.On(entry.Key, entry.Value);
            }

            socket.On(QSocket.EVENT_DISCONNECT, (reason) => { Debug.Log("Disconnected: " + reason + " \n" + Environment.StackTrace); PlayersDataScript.eliminarPartida();  fnEnd(); });
            socket.On(QSocket.EVENT_RECONNECT, () => { Debug.Log("Reconnected"); });
            socket.On(QSocket.EVENT_CONNECT, () => { Debug.Log("Connected"); fnConexion(); });
        }catch (Exception e) {
            Debug.Log("Exception: " + e);
        }
        return(true);
    }