示例#1
0
    void RechazarDuelo()
    {
        MensajeBase msg = Shark.instance.mensaje <MsgChallengeAnswer>();

        (msg as MsgChallengeAnswer).m_accepted = false;
        msg.send();
    }
示例#2
0
    void registrarMensajes()
    {
        foreach (Type type in System.Reflection.Assembly.GetExecutingAssembly().GetTypes())
        {
            object[] obj = type.GetCustomAttributes(typeof(NetMessage), true);
            if (obj.Length > 0)
            {
                MsgType     id  = (obj[0] as NetMessage).ID;
                MensajeBase msg = Activator.CreateInstance(type) as MensajeBase;
                msg.ID = id;
                ushort uid = (ushort)id;
                if (!m_mensajes.ContainsKey(uid))
                {
                    m_mensajes.Add(uid, msg);
                }
            }
        }

/*
 *      Debug.Log( "NetMessage attributes registered" );
 *
 *      Debug.Log( "Id -> Type" );
 *      foreach (var pair in m_mensajes) {
 *          Debug.Log( "  " + (MsgType)pair.Key + " -> " + pair.Value );
 *      }
 */
    }
示例#3
0
    void AceptarDuelo()
    {
        MensajeBase msg = Shark.instance.mensaje <MsgChallengeAnswer>();

        (msg as MsgChallengeAnswer).m_accepted = true;
        msg.send();
        ifcDuelo.m_rival = MsgLobbyGroup.NetToUsuario(m_client);
    }
示例#4
0
        public void enviarMensaje(MensajeBase msg)
        {
            string mensaje = JsonConvert.SerializeObject(msg);

            if (Enviar != null)
            {
                Enviar(mensaje);
            }
        }
示例#5
0
        //los usuarios deben recibir los mensajes como eventos del lado del cliente

        /*
         * TCP Client se lo paso a una clase que maneja con ID y guardar en una lista
         */
        /* private void atender(object tcpClient)
         * {
         *   Console.WriteLine("Atendiendo al cliente");
         *   TcpClient cliente = (TcpClient)tcpClient;
         *   NetworkStream stream = cliente.GetStream();
         *   StreamWriter writer = new StreamWriter(stream, Encoding.ASCII) { AutoFlush = true };
         *   StreamReader reader = new StreamReader(stream, Encoding.ASCII);
         *   while (cliente.Connected)
         *   {
         *       try
         *       {
         *           string mens = reader.ReadLine();
         *           MensajeBase msjBase = JsonConvert.DeserializeObject<MensajeBase>(mens);
         *           Console.WriteLine("Es del tipo " + msjBase.TipoMensaje);
         *           try { MensajeLogin msj = (MensajeLogin)msjBase; } catch (InvalidCastException e) { }
         *           if (nombreUsuarios.Contains(msjBase.From))
         *           {
         *               MensajeLogin respuesta = new MensajeLogin("", "", 0);
         *               respuesta.Conectado = false;
         *               respuesta.Mensaje = "Nombre de usuario ya existente";
         *               string resp = JsonConvert.SerializeObject(respuesta);
         *               Console.WriteLine("Nombre de usuario ya existente " + msjBase.From);
         *               writer.WriteLine(resp);
         *           }
         *           else
         *           {
         *               MensajeLogin respuesta = new MensajeLogin("","", 0);
         *               respuesta.Conectado = true;
         *               respuesta.Mensaje = "Conectado";
         *               nombreUsuarios.Add(msjBase.From);
         *               Console.WriteLine("El usuario se ha logeado: " + msjBase.From);
         *               string resp = JsonConvert.SerializeObject(respuesta);
         *               writer.WriteLine(resp);
         *           }
         *
         *           // manejarMensaje(msjBase,cliente);
         *       }
         *       catch (ArgumentNullException e) { }
         *   }
         *
         * }*/
        /*  private void manejarMensaje(MensajeBase msjBase,TcpClient cliente)
         * {
         *    if (msjBase.TipoMensaje == "MensajeLogin")
         *    {
         *        Console.WriteLine("Es del tipo "+ msjBase.TipoMensaje);
         *        MensajeLogin msj = (MensajeLogin)msjBase;
         *        if (nombreUsuarios.Contains(msjBase.From))
         *        {
         *            MensajeLogin respuesta = new MensajeLogin("","",0);
         *            respuesta.Conectado = false;
         *            respuesta.Mensaje = "Nombre de usuario ya existente";
         *        }
         *    }
         *    else if (msjBase.TipoMensaje == "MensajeDibujarPuntos")
         *    {
         *        Console.WriteLine("Es del tipo "+ msjBase.TipoMensaje);
         *    }
         *    else if (msjBase.TipoMensaje == "EntraSala") {
         *        Console.WriteLine("Es del tipo "+msjBase.TipoMensaje);
         *    }
         * }*/

        #endregion

        public void autenticar(object client)
        {
            TcpClient     clienteAutenticando = (TcpClient)client;
            NetworkStream stream = clienteAutenticando.GetStream();
            StreamWriter  writer = new StreamWriter(stream, Encoding.ASCII)
            {
                AutoFlush = true
            };
            StreamReader reader = new StreamReader(stream, Encoding.ASCII);

            while (true)
            {
                string      mens    = reader.ReadLine();
                MensajeBase msjBase = JsonConvert.DeserializeObject <MensajeBase>(mens);
                string      nombre  = msjBase.From;
                try { MensajeLogin msj = (MensajeLogin)msjBase; } catch (InvalidCastException e) { }
                if (estaLibreElNombre(nombre))
                {
                    MensajeLogin respuesta = new MensajeLogin("", nombre, 0);
                    respuesta.Conectado = true;
                    Cliente c = new Cliente(clienteAutenticando, nombre);
                    c.Recibir     += C_Recibir;
                    c.Desconectar += C_Desconectar;
                    lock (_ListaLocker)
                    {
                        //despues verificar sala, de momento es prueba
                        //if(conectados > 4) mandar mensaje de "server lleno"
                        //o poner al usuario en lista de espera
                        listaClientes.Add(c);
                        orden.Add(c.Id);
                    }

                    Thread HiloAtender = new Thread(c.atender);
                    Console.Out.NewLine     = "\r\n\r\n";
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine(msjBase.Fecha + ":El usuario se ha logeado: " + nombre);
                    Console.WriteLine("Total conectados " + listaClientes.Count);
                    string resp = JsonConvert.SerializeObject(respuesta);
                    writer.WriteLine(resp);
                    HiloAtender.Start();
                    break;
                }
                else
                {
                    MensajeLogin respuesta = new MensajeLogin("", "", 0);
                    respuesta.Conectado = false;
                    respuesta.Mensaje   = "Nombre de usuario ya existente ";
                    string resp = JsonConvert.SerializeObject(respuesta);
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Nombre de usuario ya existente " + msjBase.From);
                    writer.WriteLine(resp);
                }
            }
        }
示例#6
0
        public void enviar(MensajeBase msj)
        {
            string str = JsonConvert.SerializeObject(msj);

            try
            {
                writer.WriteLine(str);
            }
            catch (IOException e) {
                Console.WriteLine("No se pudo enviar el mensaje a " + id);
            }
        }
示例#7
0
        //enviar todos manda un msj a TODOS los clientes
        //excepto quien lo origina

        //puede modificarse al enviar todos los que pertenezcan en una sala cuando sea multipartida.
        private void enviarTodos(MensajeBase mb, string evitar)
        {
            lock (_ListaLocker)
            {
                foreach (Cliente c in listaClientes)
                {
                    if (c.Id != evitar)
                    {
                        c.enviar(mb);
                    }
                }
            }
        }
示例#8
0
        public void recibirMensaje(string mensaje)
        {
            MensajeBase mb = JsonConvert.DeserializeObject <MensajeBase>(mensaje);

            switch (mb.TipoMensaje)
            {
            case "MensajeLogin":
                mb = JsonConvert.DeserializeObject <MensajeLogin>(mensaje); break;

            case "MensajeEntrarSala":
                mb = JsonConvert.DeserializeObject <MensajeEntrarSala>(mensaje); break;

            case "MensajeDibujarPuntos":
                mb = JsonConvert.DeserializeObject <MensajeDibujarPuntos>(mensaje); break;

            case "MensajeEnviarPalabra":
                mb = JsonConvert.DeserializeObject <MensajeEnviarPalabra>(mensaje); break;

            case "MensajeIniciarPartida":
                mb = JsonConvert.DeserializeObject <MensajeIniciarPartida>(mensaje); break;

            case "MensajedibujarPuntos":
                mb = JsonConvert.DeserializeObject <MensajeDibujarPuntos>(mensaje); break;

            case "MensajeTocaDibujar":
                mb = JsonConvert.DeserializeObject <MensajeTocaDibujar>(mensaje); break;

            case "MensajeFinTrazo":
                mb = JsonConvert.DeserializeObject <MensajeFinTrazo>(mensaje); break;

            case "MensajeContador":
                mb = JsonConvert.DeserializeObject <MensajeContador>(mensaje); break;

            case "MensajeUsuariosEnSala":
                mb = JsonConvert.DeserializeObject <MensajeUsuariosEnSala>(mensaje); break;

            case "MensajeGanador":
                mb = JsonConvert.DeserializeObject <MensajeGanador>(mensaje); break;

            case "MensajeEmpate":
                mb = JsonConvert.DeserializeObject <MensajeEmpate>(mensaje); break;
            }
            if (Recibir != null)
            {
                Recibir(mb);
            }
        }
示例#9
0
    public byte[] serialize(MensajeBase _msg, out int len)
    {
        len = 0;
        if (_msg == null)
        {
            return(null);
        }
        ushort idx = 4;

        idx      = Serializer.ByteSerialize(_msg.GetType(), _msg, ref m_sBuffer, idx);
        _msg.Len = idx;
        Array.Copy(BitConverter.GetBytes(_msg.Len), 0, m_sBuffer, 0, 2);        // Longitud
        Array.Copy(BitConverter.GetBytes((ushort)_msg.ID), 0, m_sBuffer, 2, 2); // Identificador del paquete.
        len = idx;
        Debug.Log("Sending message: " + _msg.GetType());
        return(m_sBuffer);
    }
示例#10
0
    public void deserialize()
    {
        ushort len = BitConverter.ToUInt16(m_eBuffer, 0);

        if (m_socket.Available >= len)
        {
            m_socket.Receive(m_eBuffer, len, SocketFlags.None); // Saca el paquete completo.
            ushort      uid = BitConverter.ToUInt16(m_eBuffer, 2);
            ushort      idx = 4;
            MensajeBase msg = (MensajeBase)m_mensajes[uid];
            if (msg == null)
            {
                return;
            }
            msg.Len = len;
            msg.ID  = (MsgType)uid;
            idx     = Serializer.ByteDeserialize(msg.GetType(), msg, m_eBuffer, idx);
            Debug.Log("Received message: " + msg.GetType());
            msg.process();
        }
    }
示例#11
0
 public bool enviar(MensajeBase _msg)
 {
     if (m_socket == null)
     {
         return(false);
     }
     try{
         int len;
         serialize(_msg, out len);
         m_socket.Send(m_sBuffer, len, SocketFlags.None);
     }
     catch (Exception e)
     {
         Debug.Log("error al enviar el mensaje " + e);
         if (OnDisconnect != null)
         {
             OnDisconnect();
         }
         Desconectar();
         return(false);
     }
     return(true);
 }
示例#12
0
        public void atender()
        {
            string mensaje = "";

            while (true)
            {
                try
                {
                    mensaje             = reader.ReadLine();
                    Console.Out.NewLine = "\r\n\r\n";
                    MensajeBase msj = JsonConvert.DeserializeObject <MensajeBase>(mensaje);
                    switch (msj.TipoMensaje)
                    {
                    case "MensajeLogin":
                        msj = JsonConvert.DeserializeObject <MensajeLogin>(mensaje);
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        break;

                    case "MensajeDibujarPuntos":
                        msj = JsonConvert.DeserializeObject <MensajeDibujarPuntos>(mensaje);
                        Console.ForegroundColor = ConsoleColor.Blue;
                        break;

                    case "MensajeEntrarSala":
                        msj = JsonConvert.DeserializeObject <MensajeEntrarSala>(mensaje);
                        Console.ForegroundColor = ConsoleColor.DarkRed;
                        break;

                    case "MensajeGanador":
                        msj = JsonConvert.DeserializeObject <MensajeGanador>(mensaje);
                        break;

                    case "MensajeEnviarPalabra":
                        msj = JsonConvert.DeserializeObject <MensajeEnviarPalabra>(mensaje);
                        Console.ForegroundColor = ConsoleColor.DarkCyan;
                        break;
                    }

                    if (Recibir != null)
                    {
                        Recibir(msj);
                    }
                }
                catch (ArgumentNullException e) {
                    if (mensaje == null)
                    {
                        if (Desconectar != null)
                        {
                            Desconectar(this.id);
                            break;
                        }
                    }
                }
                catch (IOException c) {
                    if (Desconectar != null)
                    {
                        Desconectar(this.id);
                        break;
                    }
                }
            }
        }
示例#13
0
        private void Serializador_Recibir(MensajeBase msg)
        {
            switch (msg.TipoMensaje)
            {
            case "MensajeLogin":
                if (Logear != null)
                {
                    try
                    {
                        MensajeLogin msgL = (MensajeLogin)msg;
                        Logear(msgL);
                    }
                    catch (InvalidCastException e) { }
                }
                break;

            case "MensajeEntrarSala":
                if (EntraSala != null)
                {
                    try
                    {
                        MensajeEntrarSala msgEn = (MensajeEntrarSala)msg;
                        EntraSala(msgEn);
                    }
                    catch (InvalidCastException e) { }
                }
                break;

            case "MensajeDibujarPuntos":
                MensajeDibujarPuntos msgDibPun = (MensajeDibujarPuntos)msg;
                if (Dibujar != null)
                {
                    Dibujar(msgDibPun);
                }
                break;

            case "MensajeEnviarPalabra":
                MensajeEnviarPalabra msgEnvPal = (MensajeEnviarPalabra)msg;
                if (RespuestaPalabraEnviada != null)
                {
                    RespuestaPalabraEnviada(msgEnvPal);
                }
                break;

            case "MensajeIniciarPartida":
                if (IniciarPartida != null)
                {
                    try
                    {
                        MensajeIniciarPartida msgEn = (MensajeIniciarPartida)msg;
                        IniciarPartida(msgEn);
                    }
                    catch (InvalidCastException e) { }
                }
                break;

            case "MensajeTocaDibujar":
                if (TocaDibujar != null)
                {
                    try
                    {
                        MensajeTocaDibujar msgEn = (MensajeTocaDibujar)msg;
                        TocaDibujar(msgEn);
                    }
                    catch (InvalidCastException e) { }
                }
                break;

            case "MensajeFinTrazo":
                if (FinTrazo != null)
                {
                    try
                    {
                        MensajeFinTrazo msgEn = (MensajeFinTrazo)msg;
                        FinTrazo(msgEn);
                    }
                    catch (InvalidCastException e) { }
                }
                break;

            case "MensajeContador":
                if (Contador != null)
                {
                    try
                    {
                        MensajeContador msgCon = (MensajeContador)msg;
                        Contador(msgCon);
                    }
                    catch (InvalidCastException e) {
                        Console.WriteLine("151" + e.Message);
                    }
                }
                break;

            case "MensajeUsuariosEnSala":
                if (UsuariosEnSala != null)
                {
                    try {
                        MensajeUsuariosEnSala msgUsSala = (MensajeUsuariosEnSala)msg;
                        UsuariosEnSala(msgUsSala);
                    }
                    catch (InvalidCastException e)
                    {
                        Console.WriteLine("164" + e.Message);
                    }
                }
                break;

            case "MensajeGanador":
                if (Ganador != null)
                {
                    try
                    {
                        MensajeGanador msgGanador = (MensajeGanador)msg;
                        Ganador(msgGanador);
                    }
                    catch (InvalidCastException e)
                    {
                        Console.WriteLine("180" + e.Message);
                    }
                }
                break;

            case "MensajeEmpate":
                if (Empate != null)
                {
                    try
                    {
                        MensajeEmpate msgempate = (MensajeEmpate)msg;
                        Empate(msgempate);
                    }
                    catch (InvalidCastException e)
                    {
                        Console.WriteLine("195" + e.Message);
                    }
                }
                break;
            }
        }
示例#14
0
        private void C_Recibir(MensajeBase msg)
        {
            //si es para el servidor:
            if (msg.To == "")
            {
                switch (msg.TipoMensaje)
                {
                case "MensajeEnviarPalabra":
                    MensajeEnviarPalabra mj = (MensajeEnviarPalabra)msg;
                    Cliente c = filtrar(mj.From);

                    if (corroborar(mj.Palabra))
                    {
                        if (c != null)
                        {
                            filtrar(mj.From).Puntos = mj.Puntos;
                            mj.To       = mj.From;
                            mj.From     = "";
                            mj.Correcta = true;
                            enviarTodos(mj, "");
                            RecToken.Cancel();
                            actualizarSala();
                            empezarPartida();
                        }
                    }
                    else
                    {
                        enviarTodos(mj, "");
                        // filtrar(mj.From).enviar();
                    }
                    break;

                case "MensajeDibujandoPuntos":
                    enviarTodos(msg, msg.From);
                    break;

                case "MensajeGanador":
                    msg = (MensajeGanador)msg;
                    break;

                case "MensajeEntrarSala":

                    Console.WriteLine("ENTRO A LA BENDITA SALA");
                    enSala++;
                    msg = (MensajeEntrarSala)msg;
                    usuarioEnsala.Add(msg.From);
                    actualizarSala();
                    if (enSala > 1 && !EmpezoPartida)
                    {
                        empezarPartida();
                    }
                    break;

                case "MensajeFinTrazo":
                    enviarTodos(msg, msg.From);
                    break;

                case "MensajeIniciarPartida":
                    rondaActual = 0;
                    turnoActual = 0;
                    foreach (Cliente cli in listaClientes)
                    {
                        cli.Puntos = -cli.Puntos;
                    }
                    actualizarSala();
                    empezarPartida();
                    break;
                }
            }
            #region msg todos o server

            //si el msj es para todos:
            else if (msg.To == "*")
            {
                lock (_ListaLocker)
                {
                    foreach (Cliente c in listaClientes)
                    {
                        c.enviar(msg);
                    }
                }
            }
            //todos menos uno
            else if (msg.To == "-")
            {
                enviarTodos(msg, msg.From);
            }
            // si no es para el servidor:
            else
            {
                if (filtrar(msg.To) != null)
                {
                    filtrar(msg.To).enviar(msg);
                }
            }
            #endregion
        }
示例#15
0
    /// <summary>
    /// Muestra el control con los valores de los parametros recibidos
    /// </summary>
    /// <param name="_usuario"></param>
    /// <param name="_habilitarRetar">Indica si pulsar al pulsar sobre este control se permite retar a este jugador o no</param>
    /// <param name="_ocultarBotonesFavorito">Fuerza que no se muestren los botones añadir / eliminar favorito</param>
    public void AsignarValores(Usuario _usuario, bool _habilitarRetar = true, bool _ocultarBotonesFavorito = false)
    {
        // guardar la informacion del usuario
        m_usuario = _usuario;

        // actualizar textos
        m_txtUsuario.text = _usuario.alias;

        // actualizar collider
        if (_habilitarRetar)
        {
            m_btnRetar.action = (_name) => {
                Interfaz.ClickFX();

#if !DEBUG_RETO
                /*
                 * // comprobar si el jugador tiene suficiente dinero para ofrecer un duelo
                 * //H4CK para evitar pagar duelos
                 * if (Interfaz.m_monedas< Stats.PRECIO_RETO) {
                 *  // informar al jugador de que no tiene suficiente dinero para retar al rival
                 *  ifcDialogBox.instance.Show(ifcDialogBox.TipoBotones.ACEPTAR_CANCELAR, "DINERO INSUFICIENTE", "Para retar a <color=#ffd200>" + _usuario.alias + "</color> a un duelo necesitas disponer al menos <color=#ffd200>" + Stats.PRECIO_RETO + "$</color>.");
                 *
                 * } else {
                 */
#endif
                // retar al rival
                ifcDuelo.m_rival = _usuario;

                ifcDialogBox.instance.ShowTwoButtonDialog(
                    ifcDialogBox.TwoButtonType.POSITIVE_NEGATIVE,
                    LocalizacionManager.instance.GetTexto(102).ToUpper(),
                    string.Format(LocalizacionManager.instance.GetTexto(103), "<color=#ddf108> " + _usuario.alias + "</color>", _usuario.getRatio() + "%"),
                    LocalizacionManager.instance.GetTexto(45).ToUpper(),
                    LocalizacionManager.instance.GetTexto(48).ToUpper(),
                    // accion al pulsar aceptar
                    (_name1) => {
                    // enviar el mensaje al server
                    MensajeBase msg = Shark.instance.mensaje <MsgRequestDuel>();
                    (msg as MsgRequestDuel).m_challenge = _usuario.alias;
                    (msg as MsgRequestDuel).m_uid       = _usuario.uid;
                    msg.send();

                    // indicar que este jugador paga por el duelo
                    // Interfaz.m_tegoQuePagarDuelo = true;

                    // mostrar un dialogo mientras se espera la respuesta
                    ifcDialogBox.instance.ShowZeroButtonDialog(LocalizacionManager.instance.GetTexto(104).ToUpper(), LocalizacionManager.instance.GetTexto(105));
                    ifcDialogBox.instance.WaitToCloseAutomatically(Stats.TIEMPO_ESPERA_CONFIRMACION_RETO_RIVAL);
                });

#if !DEBUG_RETO
                //}
#endif
            };

            m_btnRetar.gameObject.SetActive(true);
        }
        else
        {
            m_btnRetar.gameObject.SetActive(false);
        }

        // instanciar y mostrar el jugador en la escena
        if (m_jugadorEscena != null)
        {
            GameObject.Destroy(m_jugadorEscena);
        }
        Vector3 relPosition = new Vector3(transform.position.x, transform.position.y + 0.05f, transform.position.z);
        m_jugadorEscena = Interfaz.instance.InstantiatePlayerAtScreenRelative(relPosition, _usuario.initMode, _usuario.DefaultCharacter.idModelo, (_usuario.initMode) ? _usuario.equipacionGoalkeeper : _usuario.equipacionShooter);

        // actualizar control
        gameObject.SetActive(true);
    }