Exemplo n.º 1
0
 //-----------------------------------------------TCP
 public void ManejadorNecesitados() =>
 new Thread(() =>
 {
     while (PermitirSolicitar)
     {
         ArchivoNecesitado.Hacer(null, "SP", null);
     }
 }).Start();     //Se encarga de solicitar las partes de los archivos
Exemplo n.º 2
0
        } //Se desconecto un bitNoder

        public void InicializarArchivo(int index)
        {
            if (ArchivoNecesitado.Hacer(ArchivosCompartidosVecinos[index].ArchivoMD5, "EXIST", null) == 0)
            {
                new ArchivoNecesitado(ArchivosCompartidosVecinos[index]);
            }

            new frmMensaje(Idioma.StringResources.msjArchivoEnLista).ShowDialog();
        } //Prepara el archivoNecesitado
Exemplo n.º 3
0
 public void EliminarArchivosCompartidosDeMD5(string MD5, IPAddress ip)
 {
     for (int i = 0; i < ArchivosCompartidosVecinos.Count; i++)
     {
         if (Archivo.CompararMD5(ArchivosCompartidosVecinos[i].ArchivoMD5, MD5))
         {
             ArchivosCompartidosVecinos[i].IPPropietario.Remove(ip);
             ArchivoNecesitado.Hacer(null, "DELIP", ip);
             if (ArchivosCompartidosVecinos[i].IPPropietario.Count == 0)
             {
                 ArchivosCompartidosVecinos.RemoveAt(i);
                 break;
             }
         }
     }
     informarArchivo?.Invoke(null, null);
 }
Exemplo n.º 4
0
            public void ManejarArchivo(int byteRead)
            {
                ArchivoNecesitado find = null;

                for (int i = 0; i < ArchivoNecesitado.Hacer(null, "L", null); i++)
                {
                    if (Archivo.CompararMD5(ArchivoNecesitado.archivosNecesitados[i].MD5, MD5))
                    {
                        find = ArchivoNecesitado.archivosNecesitados[i];
                        break;
                    }
                }
                Console.WriteLine("MD5: " + MD5);

                //Remplazar todo
                lock (pepe)
                {
                    if (find != null && !find.Partes[parte])
                    {
                        //bloquear si es el mismo archivo

                        using (FileStream output = new FileStream(find.RutaDesarga, FileMode.Open))
                        {
                            output.Position = parte * size;
                            if (parte == find.CantidadPartes - 1)
                            {
                                output.Write(datos, 0, find.TamañoUltimaParte);
                            }
                            else
                            {
                                output.Write(datos, 0, datos.Length);
                            }
                            find.Partes[parte] = true;
                            find.PartesDescargadas++;
                        }
                        find.DescargaCompleta();

                        Console.WriteLine("Parte: " + parte + "/" + find.CantidadPartes);
                        Console.WriteLine("Partes totales: " + find.PartesDescargadas + "/" + find.CantidadPartes);
                    }
                }
            }
Exemplo n.º 5
0
 public void EnviarArchivosNecesitados(IPAddress ip) => ArchivoNecesitado.Hacer(null, "EAN", ip);
Exemplo n.º 6
0
        } //Envio archivos == MD5

        public void AgregarIPArchivosNecesitados(IPAddress ip, string MD5) => ArchivoNecesitado.Hacer(MD5, "ADDIP", ip);
Exemplo n.º 7
0
        } //Agrega nuevas solicitudes de archivos a la lista

        public void GuardarTodosArchivosNecesitados() => ArchivoNecesitado.Hacer(null, "SAVE", null);
Exemplo n.º 8
0
 public void EliminarIP(IPAddress ip)
 {
     IPSVecinas.Remove(ip);
     ArchivoNecesitado.Hacer(null, "DELIP", ip);
     informarBitNoders?.Invoke(null, null);
 } //Se desconecto un bitNoder
Exemplo n.º 9
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;
                    }
                    }
                }
            }
        }