void ClickAgregarParticion(object sender, RoutedEventArgs e)
        {
            //Todo este rollo es para obtener al objeto al que pertenece este boton
            DependencyObject parent = (sender as Button).TemplatedParent;

            object aux = VisualTreeHelper.GetParent(parent);

            aux = VisualTreeHelper.GetParent(aux as DependencyObject);
            aux = (aux as ListBoxItem).Content;

            Descarga descarga = (aux as Descarga);

            if (descarga.Partes.Count == MAXPARTS)
            {
                Forms.MessageBox.Show("Ya ha alcanzado el límite de particiones");
                return;
            }

            if (descarga.Finalizada)
            {
                Forms.MessageBox.Show("La descarga ya ha finalizado");
                return;
            }

            descarga.AgregarParte(false);
            AgregarParte(descarga.Item.Nombre);
        }
Exemple #2
0
        private void ProcesarLectura(string lectura, TcpClient cliente)
        {
            //Verificar que se haya leido algo valido
            if (lectura == null)
            {
                return;
            }

            //Primera separacion
            string[] aux = lectura.Split(Mensajes.SEPARADOR.ToCharArray());

            //Verificar si es una solicitud
            if (aux[1].Equals(Mensajes.SOLICITUD_))
            {
                //Segunda separacion
                string[] data = aux[2].Split(Mensajes.SEPARADOR_AUX.ToCharArray());

                Descarga nueva_descarga = new Descarga(data[0], Int32.Parse(data[1]));
                nueva_descarga.SetListener(listener_descargas);

                lock (clientes)
                    clientes[cliente] = nueva_descarga;

                Thread hilo = new Thread(nueva_descarga.IniciarTransferencia);
                hilo.SetApartmentState(ApartmentState.STA);
                hilo.Start();
            }
            else if (aux[1].Equals(Mensajes.ADD_) || aux[1].Equals(Mensajes.REMOVE_))
            {
                string data = aux[2];

                foreach (Descarga descarga in clientes.Values)
                {
                    if (descarga != null)
                    {
                        if (descarga.Item.Nombre.Equals(data))
                        {
                            if (aux[1].Equals(Mensajes.ADD_))
                            {
                                descarga.AgregarParte(true);
                            }
                            else if (aux[1].Equals(Mensajes.REMOVE_))
                            {
                                descarga.EliminarParte(true);
                            }
                        }
                    }
                }
            }
        }
        public Particion(Descarga parent, FileStream file_stream, int ID,
                         TcpClient cliente = null)
        {
            this.parent = parent;

            buffer    = new byte[BUFFERSIZE];
            progreso  = 0;
            velocidad = 0;

            this.ID = ID;

            this.file_stream = file_stream;
            this.cliente     = cliente;

            finalizado = false;
        }
        public Particion(Descarga parent, FileStream file_stream, int inicio, int fin, int ID,
                         TcpListener servidor = null)
        {
            this.parent = parent;

            buffer    = new byte[BUFFERSIZE];
            progreso  = 0;
            velocidad = 0;

            this.inicio = inicio;
            this.fin    = fin;

            this.ID = ID;

            this.file_stream = file_stream;
            this.servidor    = servidor;

            finalizado = false;
        }
        //Metodo que maneja el evento del doble click (descarga)
        void ListArchivosDoubleClick(object sender, RoutedEventArgs e)
        {
            Forms.FolderBrowserDialog file_manager = new Forms.FolderBrowserDialog();
            file_manager.Description = "Seleccione el lugar donde se guardará el archivo: ";

            //Si la seleccion es valida
            if (file_manager.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                //Guardar la ruta seleccionada
                ruta_guardar = file_manager.SelectedPath;

                Item item = lista_archivos.SelectedItem as Item;

                //Informacion de la descarga
                string ruta        = item.Ruta;
                int    particiones = 3; //PENDIENTE!! (particiones != 0)

                if (item != null)
                {
                    writer.Write(Mensajes.SOLICITUD + Mensajes.SEPARADOR +
                                 ruta + Mensajes.SEPARADOR_AUX +
                                 particiones);

                    Descarga nueva_descarga = new Descarga(Path.Combine(ruta_guardar, item.Nombre), particiones);
                    descargas.Add(nueva_descarga);

                    ActualizarListBoxDescargas(descargas);

                    Thread hilo = new Thread(nueva_descarga.SolicitarTransferencia);
                    hilo.SetApartmentState(ApartmentState.STA);
                    hilo.Start();

                    Forms.MessageBox.Show("¡Descarga iniciada!\n" +
                                          " Se han creado " + particiones +
                                          " particiones por defecto");
                }
            }
        }