public void EliminarParte(bool is_server) { Particion to_delete = partes[partes.Count - 1]; Particion new_end = partes[partes.Count - 2]; lock (partes) { lock (new_end) { new_end.Fin = to_delete.Fin; new_end.NotifyPropertyChanged("Fin"); } lock (to_delete) { to_delete.Fin = to_delete.Progreso; to_delete.Finalizado = true; to_delete.NotifyPropertyChanged("Fin"); } partes.Remove(to_delete); } NotifyPropertyChanged("Partes"); }
public void AgregarParte(bool is_server) { Int64 menor = Int64.MaxValue; Particion aux = null; foreach (Particion part in partes) { if (part.Progreso < menor) { aux = part; menor = part.Progreso; } } int nuevo_fin = 0; int viejo_fin = 0; lock (aux) { int fin = aux.Fin; int progreso = aux.Progreso; int mitad = (fin - progreso) / 2; viejo_fin = aux.Fin; nuevo_fin = aux.Fin - mitad; aux.Fin = nuevo_fin; aux.NotifyPropertyChanged("Fin"); } lock (partes) { if (is_server) { Particion nueva_parte = new Particion(this, file_stream, nuevo_fin, viejo_fin, partes.Count, listener); partes.Add(nueva_parte); partes.Add(nueva_parte); NotifyPropertyChanged("Partes"); new Thread(nueva_parte.IniciarTransferencia).Start(); } else { TcpClient cliente = new TcpClient(Cliente.HOST, Cliente.PORT + 1); Particion nueva_parte = new Particion(this, file_stream, partes.Count, cliente); partes.Add(nueva_parte); NotifyPropertyChanged("Partes"); new Thread(nueva_parte.SolicitarTransferencia).Start(); } } }