示例#1
0
        public void ProcesarRecibir(IAsyncResult resultadoAsync)
        {
            try
            {
                byte[]     data;
                Paquete    datoRecibido        = new Paquete(buferRx);
                Paquete    datoParaEnviar      = new Paquete();
                IPEndPoint puntoExtremoCliente = new IPEndPoint(IPAddress.Any, 0);
                EndPoint   extremoEP           = (EndPoint)puntoExtremoCliente;
                socketServidor.EndReceiveFrom(resultadoAsync, ref extremoEP);
                datoParaEnviar.IdentificadorChat = datoRecibido.IdentificadorChat;
                datoParaEnviar.NombreChat        = datoRecibido.NombreChat;
                switch (datoRecibido.IdentificadorChat)
                {
                case Paquete.IdentificadorDato.Mensaje:
                    datoParaEnviar.MensajeChat = string.Format("{0}: {1}", datoRecibido.NombreChat, datoRecibido.MensajeChat);
                    break;

                case Paquete.IdentificadorDato.Conectado:
                    Cliente nuevoCliente = new Cliente();
                    nuevoCliente.puntoExtremo = extremoEP;
                    nuevoCliente.nombre       = datoRecibido.NombreChat;
                    listaClientes.Add(nuevoCliente);
                    datoParaEnviar.MensajeChat = string.Format("-- {0} está conectado --", datoRecibido.NombreChat);
                    break;

                case Paquete.IdentificadorDato.Desconectado:
                    foreach (Cliente c in listaClientes)
                    {
                        if (c.puntoExtremo.Equals(extremoEP))
                        {
                            listaClientes.Remove(c);
                            break;
                        }
                    }
                    datoParaEnviar.MensajeChat = string.Format("-- {0} se ha desconectado -- ", datoRecibido.NombreChat);
                    break;
                }
                data = datoParaEnviar.ObtenerArregloBytes();
                foreach (Cliente clienteEnLista in listaClientes)
                {
                    if (clienteEnLista.puntoExtremo != extremoEP || datoParaEnviar.IdentificadorChat != Paquete.IdentificadorDato.Conectado)
                    {
                        socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                    }
                }
                socketServidor.BeginReceiveFrom(buferRx, 0, buferRx.Length, SocketFlags.None, ref extremoEP, new AsyncCallback(ProcesarRecibir), extremoEP);
                Invoke(delegadoActualizarEstado, new object[] { datoParaEnviar.MensajeChat });
            }
            catch (Exception ex) { MessageBox.Show("Error en la recepción: " + ex.Message, "Servidor UDP", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        }
示例#2
0
        //metodos
        private void ProcesarRecibir(IAsyncResult resultadoAsync)
        {
            try
            {
                byte[]     data;
                string     listado             = null;
                Paquete    datoRecibido        = new Paquete(buferRx);
                Paquete    datoParaEnviar      = new Paquete();
                IPEndPoint puntoExtremoCliente = new IPEndPoint(IPAddress.Any, 0);
                EndPoint   extremoEP           = (EndPoint)puntoExtremoCliente;
                socketServidor.EndReceiveFrom(resultadoAsync, ref extremoEP);
                saber = extremoEP.ToString();
                Console.WriteLine(saber);
                datoParaEnviar.IdentificadorChat = datoRecibido.IdentificadorChat;
                datoParaEnviar.NombreChat        = datoRecibido.NombreChat;
                switch (datoRecibido.IdentificadorChat)
                {
                case IdentificadorDato.Mensaje:
                    switch (datoRecibido.IdentificadorL)
                    {
                    case IdentificadorListado.Solicitar:
                        datoParaEnviar.MensajeChat = string.Format("{0}:{1}:{2}", datoRecibido.MensajeChat, extremoEP.ToString(), datoRecibido.NombreChat);
                        Cliente  client     = new Cliente();
                        String[] substrings = datoRecibido.MensajeChat.Split(',', ':');
                        client.nombre = substrings[0];
                        IPAddress  dir = IPAddress.Parse(substrings[1]);
                        IPEndPoint Cli = new IPEndPoint(dir, Convert.ToInt32(substrings[2]));
                        client.puntoExtremo = Cli;
                        data = datoParaEnviar.ObtenerArregloBytes();
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            string nombre    = clienteEnLista.nombre;
                            string direccion = clienteEnLista.puntoExtremo.ToString();
                            if ((client.nombre == nombre) && (client.puntoExtremo.ToString() == direccion))
                            {
                                socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                            }
                        }
                        break;

                    case IdentificadorListado.Aceptar:
                        String[] substrings1 = datoRecibido.MensajeChat.Split(',', ':');
                        Cliente  client1     = new Cliente();
                        Cliente  client2     = new Cliente();
                        client1.nombre = substrings1[0];
                        IPAddress  dir1 = IPAddress.Parse(substrings1[1]);
                        IPEndPoint Cli1 = new IPEndPoint(dir1, Convert.ToInt32(substrings1[2]));
                        client1.puntoExtremo = Cli1;
                        IPAddress  dir2 = IPAddress.Parse(substrings1[3]);
                        IPEndPoint Cli2 = new IPEndPoint(dir1, Convert.ToInt32(substrings1[4]));
                        client2.nombre       = substrings1[5];
                        client2.puntoExtremo = Cli2;
                        string mensaje1 = client1.nombre + "," + client1.puntoExtremo.ToString();
                        string mensaje2 = client2.nombre + "," + client2.puntoExtremo.ToString();
                        datoParaEnviar.IdentificadorChat = IdentificadorDato.Iniciar;
                        datoParaEnviar.IdentificadorL    = IdentificadorListado.Aceptar;
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            string direccion = clienteEnLista.puntoExtremo.ToString();
                            datoParaEnviar.MensajeChat = mensaje2;
                            data = datoParaEnviar.ObtenerArregloBytes();
                            if ((client1.puntoExtremo.ToString() == direccion))
                            {
                                socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                            }
                        }
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            string direccion = clienteEnLista.puntoExtremo.ToString();
                            datoParaEnviar.MensajeChat = mensaje1;
                            data = datoParaEnviar.ObtenerArregloBytes();
                            if ((client2.puntoExtremo.ToString() == direccion))
                            {
                                socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                            }
                        }
                        jug1 = mensaje1;
                        jug2 = mensaje2;
                        listaClientesJugando.Add(client1);
                        listaClientesJugando.Add(client2);
                        Console.WriteLine(jug1);
                        Console.WriteLine(jug2);
                        foreach (Cliente c in listaClientes)
                        {
                            if (c.puntoExtremo.ToString() == client1.puntoExtremo.ToString())
                            {
                                listaClientes.Remove(c);
                                break;
                            }
                        }
                        foreach (Cliente c in listaClientes)
                        {
                            if (c.puntoExtremo.ToString() == client2.puntoExtremo.ToString())
                            {
                                listaClientes.Remove(c);
                                break;
                            }
                        }
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            listado = listado + clienteEnLista.nombre + "," + clienteEnLista.puntoExtremo.ToString() + ",";
                        }
                        datoParaEnviar.IdentificadorChat = IdentificadorDato.Listado;
                        datoParaEnviar.IdentificadorL    = IdentificadorListado.Actualiza;
                        datoParaEnviar.MensajeChat       = listado;
                        data = datoParaEnviar.ObtenerArregloBytes();
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                        }
                        break;

                    case IdentificadorListado.Negar:
                        String[]   substrings3 = datoRecibido.MensajeChat.Split(',', ':');
                        Cliente    client3     = new Cliente();
                        IPAddress  dir3        = IPAddress.Parse(substrings3[1]);
                        IPEndPoint Cli3        = new IPEndPoint(dir3, Convert.ToInt32(substrings3[2]));
                        client3.nombre       = substrings3[5];
                        client3.puntoExtremo = Cli3;
                        string mensaje3 = datoRecibido.MensajeChat;
                        datoParaEnviar.IdentificadorChat = IdentificadorDato.Iniciar;
                        datoParaEnviar.IdentificadorL    = IdentificadorListado.Negar;
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            string direccion = clienteEnLista.puntoExtremo.ToString();
                            datoParaEnviar.MensajeChat = mensaje3;
                            data = datoParaEnviar.ObtenerArregloBytes();
                            if ((client3.puntoExtremo.ToString() == direccion))
                            {
                                socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                            }
                        }
                        break;
                    }

                    break;

                case IdentificadorDato.Listado:
                    switch (datoRecibido.IdentificadorL)
                    {
                    case IdentificadorListado.Tuinfo:

                        break;

                    case IdentificadorListado.Conectado:
                        Cliente nuevoCliente = new Cliente(); nuevoCliente.puntoExtremo = extremoEP; nuevoCliente.nombre = datoRecibido.NombreChat;
                        listaClientes.Add(nuevoCliente);
                        datoParaEnviar.MensajeChat = string.Format("-- {0} está conectado --", datoRecibido.NombreChat);
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            listado = listado + clienteEnLista.nombre + "," + clienteEnLista.puntoExtremo.ToString() + ",";
                        }
                        datoParaEnviar.MensajeChat = listado;
                        data = datoParaEnviar.ObtenerArregloBytes();
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                        }
                        break;

                    case IdentificadorListado.Desconectado:

                        foreach (Cliente c in listaClientes)
                        {
                            if (c.puntoExtremo.Equals(extremoEP))
                            {
                                listaClientes.Remove(c); break;
                            }
                        }
                        datoParaEnviar.MensajeChat = string.Format("-- {0} se ha desconectado -- ", datoRecibido.NombreChat);
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            listado = listado + clienteEnLista.nombre + "," + clienteEnLista.puntoExtremo.ToString() + ",";
                        }
                        datoParaEnviar.MensajeChat = listado;
                        data = datoParaEnviar.ObtenerArregloBytes();
                        foreach (Cliente clienteEnLista in listaClientes)
                        {
                            socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                        }
                        break;
                    }

                    break;

                case IdentificadorDato.Jugada:
                    Console.WriteLine(datoRecibido.MensajeChat);
                    String[] substrings10 = datoRecibido.MensajeChat.Split(',', ':');
                    Cliente  jugador      = new Cliente();
                    jugador.nombre = substrings10[1];
                    IPAddress  dire = IPAddress.Parse(substrings10[2]);
                    IPEndPoint extr = new IPEndPoint(dire, Convert.ToInt32(substrings10[3]));
                    jugador.puntoExtremo = extr;
                    string enviara = jugador.puntoExtremo.ToString();
                    datoParaEnviar.IdentificadorChat = IdentificadorDato.Jugada;
                    datoParaEnviar.MensajeChat       = datoRecibido.MensajeChat;
                    data = datoParaEnviar.ObtenerArregloBytes();

                    foreach (Cliente clienteEnLista in listaClientesJugando)
                    {
                        if (clienteEnLista.puntoExtremo.ToString() == enviara)
                        {
                            socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                        }
                    }

                    break;

                case IdentificadorDato.Resultado:
                    Console.WriteLine("Resultaddo");
                    Console.WriteLine(datoRecibido.MensajeChat);
                    String[] substrings11 = datoRecibido.MensajeChat.Split(',', ':');
                    Cliente  jugador2     = new Cliente();
                    jugador2.nombre = substrings11[1];
                    IPAddress  dire2 = IPAddress.Parse(substrings11[2]);
                    IPEndPoint extr2 = new IPEndPoint(dire2, Convert.ToInt32(substrings11[3]));
                    jugador2.puntoExtremo = extr2;
                    string enviara2 = jugador2.puntoExtremo.ToString();
                    datoParaEnviar.IdentificadorChat = IdentificadorDato.Resultado;
                    datoParaEnviar.MensajeChat       = datoRecibido.MensajeChat;
                    data = datoParaEnviar.ObtenerArregloBytes();

                    foreach (Cliente clienteEnLista in listaClientesJugando)
                    {
                        if (clienteEnLista.puntoExtremo.ToString() == enviara2)
                        {
                            socketServidor.BeginSendTo(data, 0, data.Length, SocketFlags.None, clienteEnLista.puntoExtremo, new AsyncCallback(ProcesarEnviar), clienteEnLista.puntoExtremo);
                        }
                    }
                    break;
                }

                socketServidor.BeginReceiveFrom(buferRx, 0, buferRx.Length, SocketFlags.None, ref extremoEP, new AsyncCallback(ProcesarRecibir), extremoEP);
                Invoke(delegadoActualizarEstado, new object[] { datoParaEnviar.MensajeChat });
            }
            catch (Exception ex) { MessageBox.Show("Error en la recepción: " + ex.Message, "Servidor UDP", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        }