} //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); }
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); }
public ArchivoNecesitado(Archivo AN) =>
public void AgregarArchivosCompartidos(Archivo a) { ArchivosCompartidosVecinos.Add(a); }
public void EnviarUnicoArchivoCompartido(Archivo a) => IPSVecinas.ForEach(x => EnviarUDP(x, "bitNode@AAC@" + JsonConvert.SerializeObject(a)));
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; } } } } }