//-----------------------------------------------TCP public void ManejadorNecesitados() => new Thread(() => { while (PermitirSolicitar) { ArchivoNecesitado.Hacer(null, "SP", null); } }).Start(); //Se encarga de solicitar las partes de los archivos
} //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
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 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 EnviarArchivosNecesitados(IPAddress ip) => ArchivoNecesitado.Hacer(null, "EAN", ip);
} //Envio archivos == MD5 public void AgregarIPArchivosNecesitados(IPAddress ip, string MD5) => ArchivoNecesitado.Hacer(MD5, "ADDIP", ip);
} //Agrega nuevas solicitudes de archivos a la lista public void GuardarTodosArchivosNecesitados() => ArchivoNecesitado.Hacer(null, "SAVE", null);
public void EliminarIP(IPAddress ip) { IPSVecinas.Remove(ip); ArchivoNecesitado.Hacer(null, "DELIP", ip); informarBitNoders?.Invoke(null, null); } //Se desconecto un bitNoder
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; } } } } }