예제 #1
0
        } //Busco coincidencias de mis AC con los tags recividos y los envio

        public void EnviarArchivosMD5(IPAddress ip, string MD5Archivos)
        {
            string[] archivos = MD5Archivos.Split('|');
            for (int i = 0; i < archivos.Length; i++)
            {
                for (int x = 0; x < frmCliente.archivosCompartidos.Count; x++)
                {
                    if (Archivo.CompararMD5(frmCliente.archivosCompartidos[x].ArchivoMD5, archivos[i]) && frmCliente.archivosCompartidos[x].Activo)
                    {
                        EnviarUDP(ip, "bitNode@AAS@" + JsonConvert.SerializeObject(frmCliente.archivosCompartidos[x]));
                        break;
                    }
                }
            }
        } //Envio archivos == MD5
예제 #2
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);
 }
예제 #3
0
        public static int Hacer(object AS, string hacer, object dato)
        {
            lock (locker)
            {
                switch (hacer)
                {
                case "ADD":     //Añadir
                {
                    ArchivoSolicitado ASAUX = (ArchivoSolicitado)AS;
                    if (!archivosSolicitados.Exists(x => (Archivo.CompararMD5(x.MD5, ASAUX.MD5) && ASAUX.IDPosicion == x.IDPosicion && ASAUX.ParteArchivo == x.ParteArchivo)))
                    {
                        archivosSolicitados.Add(ASAUX);
                    }
                    break;
                }

                case "DEL":     //Eliminar
                {
                    archivosSolicitados.RemoveAt((int)dato);
                    break;
                }

                case "DELIP":     //Existe
                {
                    for (int i = 0; i < archivosSolicitados.Count; i++)
                    {
                        if (archivosSolicitados[i].IPDestino.Equals((IPAddress)dato))
                        {
                            archivosSolicitados.RemoveAt(i);
                            i = -1;
                        }
                    }
                    break;
                }

                case "L":
                {
                    return(archivosSolicitados.Count);
                }
                }
                return(1); //true
            }
        }
예제 #4
0
파일: SocketTCP.cs 프로젝트: LcsGrz/bitNode
            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);
                    }
                }
            }
예제 #5
0
 public void AgregarArchivoCompartido(Archivo a, IPAddress ip)
 {
     for (int i = 0; i < ArchivosCompartidosVecinos.Count; i++)
     {
         if (Archivo.CompararMD5(ArchivosCompartidosVecinos[i].ArchivoMD5, a.ArchivoMD5))
         {
             if (!ArchivosCompartidosVecinos[i].IPPropietario.Exists(x => x.Equals(ip)))
             {
                 ArchivosCompartidosVecinos[i].IPPropietario.Add(ip);
             }
             informarArchivo?.Invoke(null, null);
             return;
         }
     }
     a.IPPropietario = new List <IPAddress>()
     {
         ip
     };
     ArchivosCompartidosVecinos.Add(a);
     informarArchivo?.Invoke(null, null);
 }
예제 #6
0
파일: Archivo.cs 프로젝트: LcsGrz/bitNode
        public static List <Archivo> LeerArchivos()
        {
            List <Archivo> Archivos = new List <Archivo>();

            if (!Directory.Exists(rutaBN))
            {
                Directory.CreateDirectory(rutaBN);
            }

            foreach (var file in new DirectoryInfo(rutaBN).GetFiles())
            {
                Archivo a = JsonConvert.DeserializeObject <Archivo>(File.ReadAllText(rutaBN + "\\" + file.Name));
                if (File.Exists(a.Ruta))
                {
                    Archivos.Add(a);
                }
                else
                {
                    File.Delete(rutaBN + "\\" + a.Nombre.Split('.')[0] + ".json");
                }
            }
            return(Archivos);
        }
예제 #7
0
 public ArchivoNecesitado(Archivo AN) =>
예제 #8
0
 public void AgregarArchivosCompartidos(Archivo a)
 {
     ArchivosCompartidosVecinos.Add(a);
 }
예제 #9
0
 public void EnviarUnicoArchivoCompartido(Archivo a) => IPSVecinas.ForEach(x => EnviarUDP(x, "bitNode@AAC@" + JsonConvert.SerializeObject(a)));
예제 #10
0
파일: UDP.cs 프로젝트: LcsGrz/bitNode
        private void cbRecibir(IAsyncResult ar)
        {
            TodoHecho.Set();

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

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

            if (!IPRecibida.Equals(Servidor.ObtenerIPLocal()))
            {
                byte[]   data       = new byte[1024];
                string[] stringData = Encoding.ASCII.GetString(SO.buffer, 0, read).Split('@');
                if (stringData[0] == "bitNode")
                {
                    server.AgregarIP(IPRecibida);
                    //--------------------------------------
                    switch (stringData[1])
                    {
                    case "PPING":     // PrimerPing
                    {
                        EnviarMSJ_UDP(IPRecibida, "bitNode@EACV@");
                        break;
                    }

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

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

                    case "AACV":     // AgregarArchivosCompartidosVecinos
                    {
                        Archivo a = JsonConvert.DeserializeObject <Archivo>(stringData[2]);
                        a.IPPropietario = IPRecibida;
                        server.AgregarArchivosCompartidos(a);
                        break;
                    }

                    case "EACV":     // EliminarArchivosCompartidosVecinos
                    {
                        server.EliminarArchivosCompartidosDeIP(IPRecibida);
                        server.EnviarUDP(IPRecibida, "bitNode@CEACV@");
                        break;
                    }

                    case "CEACV":     // ConfirmadoEliminoArchivosCompartidosVecinos
                    {
                        server.EnviarArchivosCompartidos(IPRecibida);
                        break;
                    }
                    }
                }
            }
        }