} //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
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); }
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 } }
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); } } }
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); }