/** Método Run() */ public void run() { // Log.log("\n\nFILERECEPCION",""); try { // RECIBIR UN FICHERO this.receiveFile(); if (this.id_socketIn != null) this.protocolcFTP.removeFileRecepcion(this.id_socketIn); } catch (ClusterNetInvalidParameterException e) { protocolcFTP.getFTP().error(e.getMessage()); } catch (ClusterNetExcepcion e) { protocolcFTP.getFTP().error(e.getMessage()); } catch (IOException e) { protocolcFTP.getFTP().error(e.getMessage()); } finally { Log.log("*.- FIN FileRecepcion FIABLE.", ""); } }
/** Lee del flujo de entrada todos lo bytes y los tira. */ private void tirarBytes() throws IOException { cFtp ftp = cFtp.getFTP(); try { this.file = new File("nulo"); ftp.insertRecepcionString( "Transfer just initiated. Waiting next transmission to join...", "icono_informacion"); while (protocolcFTP.esActiva() && (this.file != null)) { byte[] bytes = new byte[this.id_socketIn.available()]; // Log.log("Bytes disponibles: "+bytes.length,""); int iBytesLeidos = this.id_socketIn.read(bytes); // FIN DE FLUJO???... if (iBytesLeidos == -1) { Log.log("tirar bytes : FIN DE FLUJO**************************", ""); return; } } } finally { this.file = null; } }
/** Recibir UN FICHERO */ private void receiveFile() throws IOException { this.file = null; // Log.log("receiveFile()",""); // --------------------------------- // Recibir ID... if (!receiveIDFTPMulticast()) { tirarBytes(); return; } // Recibir FileSize... lFileSize = this.receiveFileSize(); if (lFileSize <= 0) { tirarBytes(); return; } // Recibir FileName... sFileName = this.receiveFileName(); if (sFileName == null) { tirarBytes(); return; } // Fichero temporal.. this.file = File.createTempFile("org.clusternet.ftp" + System.currentTimeMillis(), ".tmp"); // Comprobar si ya existe. if (this.file.exists()) { if (!this.file.delete()) throw new IOException( "The file could not deleted " + sFileName + newline + "1. Check you hace privilegies." + newline + "2.Check the file is not used by another application."); } // Crear el fichero... if (!this.file.createNewFile()) { // mensajeErrorEscritura(); throw new IOException( "The file could not be closed " + sFileName + newline + "1. Check you hace privilegies." + newline + "2.Check the file is not used by another application."); } // Comprobar si se puede escribir. if (!this.file.canWrite()) { // mensajeErrorEscritura(); throw new IOException( "The file could not be writed " + sFileName + newline + "1. Check you hace privilegies." + newline + "2.Check the file is not used by another application."); } // Flujo de salida al fichero... this.fileOutputStream = new FileOutputStream(file); // Iniciar JDialogRecepcion this.jDialogRecepcion = new JDialogRecepcion( this, null, "Receiving " + this.id_socketIn.getID_Socket(), false, sFileName, lFileSize, null, this.id_socketIn.getID_Socket()); this.jDialogRecepcion.show(); try { if (protocolcFTP.getModo() == ClusterNet.MODE_DELAYED_RELIABLE || protocolcFTP.getModo() == ClusterNet.MODE_RELIABLE) { cFtp.getFTP().insertRecepcionString("Initializing reception of " + sFileName, null); lBytesLeidos = 0; byte[] bytes = new byte[1024 * 2]; while (protocolcFTP.esActiva() /* && (lBytesLeidos < lFileSize) */ && (this.file != null)) { // if(this.id_socketIn.available() > 0) // { // Log.log("Bytes disponibles: "+bytes.length,""); int iBytesLeidos = this.id_socketIn.read(bytes); // FIN DE FLUJO???... if (iBytesLeidos == -1) { Log.log("FILERECPECION -> RECEIVEFILE : FIN DE FLUJO*", ""); break; } // Ajustar tamaño... lBytesLeidos += iBytesLeidos; this.jDialogRecepcion.setBytesRecibidos(lBytesLeidos); try { this.fileOutputStream.write(bytes, 0, iBytesLeidos); } catch (IOException e) { mensajeErrorEscribiendo(e.getMessage()); throw e; } // } // else // ClusterTimer.sleep(10); } // Mostrar resumen de recepción... this.resumenRecepcion(); } else { // NUNCA DEBE DE ENTRAR AQUI. } } finally { // Eliminar este objeto del treemap en la clase ProtocolcFTP if (this.protocolcFTP.getModo() == ClusterNet.MODE_DELAYED_RELIABLE || protocolcFTP.getModo() == ClusterNet.MODE_RELIABLE) { this.protocolcFTP.removeFileRecepcion(this.id_socketIn); } else { this.protocolcFTP.removeFileRecepcion(this.id_socket); } // desactivar el diálogo de recepción... if (this.jDialogRecepcion != null) this.jDialogRecepcion.setVisible(false); // Cerrar Flujos... this.id_socketIn.close(); this.id_socketIn = null; if (this.fileOutputStream != null) this.fileOutputStream.close(); if (protocolcFTP.esActiva() && this.file != null) { // Cambiar Localización y Nombre del fichero... File MFTPfile = new File(sFileName); if (MFTPfile.exists()) { if (this.mensajeFileExists()) { if (!MFTPfile.delete()) { this.protocolcFTP .getFTP() .error( "The file can't be deleted: " + sFileName + newline + "1. Check you hace privilegies." + newline + "2.Check the file is not used by another application."); // Eliminar temporal this.file.delete(); this.file = null; return; } if (!file.renameTo(MFTPfile)) { this.protocolcFTP .getFTP() .error( "The file can't be renamed:" + sFileName + newline + "1. Check you hace privilegies." + newline + "2.Check the file is not used by another application."); // Eliminar temporal this.file.delete(); this.file = null; } } } else if (!file.renameTo(MFTPfile)) { this.protocolcFTP .getFTP() .error( "The file can't be renamed:" + sFileName + newline + "1. Check you hace privilegies." + newline + "2.Check the file is not used by another application."); // Eliminar temporal this.file.delete(); this.file = null; } } } }