Ejemplo n.º 1
0
 public frmSplash()
 {
     InitializeComponent();
     BackColor = new Configuracion().Leer().colorVistaFondo;
     tCierre.Start();
 }
Ejemplo n.º 2
0
        private void cbRecibir(IAsyncResult ar)
        {
            TodoHecho.Set();

            StateObject SO           = (StateObject)ar.AsyncState;
            Socket      s            = SO.socket;
            IPEndPoint  sender       = new IPEndPoint(IPAddress.Any, puerto);
            EndPoint    tempRemoteEP = sender;

            int       read       = s.EndReceiveFrom(ar, ref tempRemoteEP);
            IPAddress IPRecibida = IPAddress.Parse(tempRemoteEP.ToString().Split(':')[0]);

            if (!IPRecibida.Equals(Controlador.ObtenerIPLocal()))
            {
                byte[]   data       = new byte[1024];
                string[] stringData = Encoding.UTF8.GetString(SO.buffer, 0, read).Split('@');

                if (stringData[0] == "bitNode")
                {
                    //---
                    //    Console.WriteLine("RECIBI: -IP: " + IPRecibida + " -MSJ: " + Encoding.UTF8.GetString(SO.buffer, 0, read));
                    //---
                    bool primeraVez = controlador.AgregarIP(IPRecibida);

                    //--------------- Solicitar archivos a descargar
                    if (primeraVez)
                    {
                        controlador.EnviarArchivosNecesitados(IPRecibida);
                    }
                    bool sync = new Configuracion().Leer().SyncActiva;
                    //--------------------------------------
                    switch (stringData[1])
                    {
                    case "PPING":     // PrimerPing
                    {
                        string[] msj = stringData[2].Split('|');
                        if (msj[0] == "OK")
                        {
                            if (bool.Parse(msj[1]))         //true
                            {
                                EnviarMSJ_UDP(IPRecibida, "bitNode@ETACV@");
                            }
                            else if (!(Controlador.RecivirACV && primeraVez && sync))
                            {
                                EnviarMSJ_UDP(IPRecibida, "bitNode@PONG@");
                            }
                        }
                        else         //IPFIJA
                        {
                            controlador.EnviarListaIPS(IPRecibida);
                            if (bool.Parse(msj[1]))         //true
                            {
                                EnviarMSJ_UDP(IPRecibida, "bitNode@ETACV@");
                            }
                        }

                        if (Controlador.RecivirACV && primeraVez && sync)
                        {
                            EnviarMSJ_UDP(IPRecibida, "bitNode@PPING@OK|true");
                        }

                        break;
                    }

                    //------------------------------------------------------------------------------
                    case "PING":     //Estoy vivo?
                    {
                        EnviarMSJ_UDP(IPRecibida, "bitNode@PONG@");
                        break;
                    }

                    case "SOLICITAR":     //Hay una solicitud
                    {
                        Controlador.Solicitudes.Add(stringData[2]);
                        Controlador.InformarSolicitud();
                        break;
                    }

                    case "ETACV":     // EliminarTodosLosArchivosCompartidosVecinos
                    {
                        if (Controlador.RecivirACV)
                        {
                            controlador.EliminarArchivosCompartidosDeIP(IPRecibida);
                            controlador.EnviarUDP(IPRecibida, "bitNode@CEACV@");
                        }
                        break;
                    }

                    case "CEACV":     // ConfirmadoEliminoArchivosCompartidosVecinos
                    {
                        controlador.EnviarListaArchivosCompartidos(IPRecibida);
                        break;
                    }

                    case "SAD":     // Solicitar Archivo a Descargar
                    {
                        string[]          msj = stringData[2].Split('|');
                        ArchivoSolicitado AS  = new ArchivoSolicitado()
                        {
                            IPDestino = IPRecibida, MD5 = msj[0], ParteArchivo = Convert.ToInt32(msj[1])
                        };
                        controlador.agregarSolicitud(AS);
                        break;
                    }

                    case "IPV":     // Añadir IPVecinas
                    {
                        if (controlador.AgregarIP(IPAddress.Parse(stringData[2])))
                        {
                            EnviarMSJ_UDP(IPAddress.Parse(stringData[2]), "bitNode@PPING@OK|" + Controlador.RecivirACV);
                        }
                        break;
                    }

                    case "BYE":     // Se desconecto un bitNoder
                    {
                        controlador.EliminarIP(IPRecibida);
                        controlador.EliminarArchivosCompartidosDeIP(IPRecibida);
                        controlador.EliminarPeticiones(IPRecibida);
                        break;
                    }

                    case "SAC":     // SolicitarArchivosCompartidos
                    {
                        EnviarMSJ_UDP(IPRecibida, "bitNode@ETACV@");
                        break;
                    }

                    case "ASNULL":     // ArchivoSolicitado NULL - no existe
                    {
                        new frmMensaje(stringData[2] + " : " + Idioma.StringResources.msjASNULL).ShowDialog();
                        break;
                    }

                    case "AAC":     // AgregarArchivoCompartido
                    {
                        if (Controlador.RecivirACV && sync)
                        {
                            controlador.AgregarArchivoCompartido(JsonConvert.DeserializeObject <Archivo>(stringData[2]), IPRecibida);
                        }
                        break;
                    }

                    case "EAC":     // EliminarArchivoCompartido
                    {
                        if (Controlador.RecivirACV)
                        {
                            controlador.EliminarArchivosCompartidosDeMD5(stringData[2], IPRecibida);
                        }
                        break;
                    }

                    case "SACTAG":     //SolicitarArchivosCompartidos por TAG
                    {
                        controlador.EnviarListaArchivosCompartidosTAG(IPRecibida, stringData[2]);
                        break;
                    }

                    case "AACT":     // AgregarArchivoCompartido por TAGub
                    {
                        if (Controlador.RecivirACV && !sync)
                        {
                            controlador.AgregarArchivoCompartido(JsonConvert.DeserializeObject <Archivo>(stringData[2]), IPRecibida);
                        }
                        break;
                    }

                    case "TEA":     // TENES ESTE ARCHIVO
                    {
                        controlador.EnviarArchivosMD5(IPRecibida, stringData[2]);
                        break;
                    }

                    case "AAS":     // AgregarArchivoSolicitadoIP
                    {
                        controlador.AgregarIPArchivosNecesitados(IPRecibida, JsonConvert.DeserializeObject <Archivo>(stringData[2]).ArchivoMD5);
                        break;
                    }

                    case "EAS":     // EliminarArchivoSolicitado
                    {
                        ArchivoNecesitado.Hacer(null, "DELIP", IPRecibida);
                        break;
                    }
                    }
                }
            }
        }