mirror of
https://github.com/workinghard/GuitarTeX2.git
synced 2025-12-17 03:58:02 +00:00
Init
This commit is contained in:
294
src/guitartex2/FileTransfer.java
Normal file
294
src/guitartex2/FileTransfer.java
Normal file
@@ -0,0 +1,294 @@
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
package guitartex2;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
class FileTransfer {
|
||||
|
||||
// Debug 0/1
|
||||
int debug = 0;
|
||||
|
||||
// Define commands
|
||||
//private static String quit = "CMD:123_QUIT_123";
|
||||
//private static String transfer = "CMD:123_TRANSFER_123";
|
||||
private static String ok = "CMD:123_OK_123";
|
||||
private static String failed = "CMD:123_FAILED_123";
|
||||
|
||||
// Father ID
|
||||
int fId;
|
||||
|
||||
// Streams
|
||||
DataInputStream inStream;
|
||||
DataOutputStream outStream;
|
||||
|
||||
// Main - Constructor
|
||||
public FileTransfer(int id, DataInputStream inputStream, DataOutputStream outputStream) {
|
||||
fId = id;
|
||||
inStream = inputStream;
|
||||
outStream = outputStream;
|
||||
}
|
||||
|
||||
public FileTransfer(int id, int mDebug, DataInputStream inputStream, DataOutputStream outputStream) {
|
||||
debug = mDebug;
|
||||
fId = id;
|
||||
inStream = inputStream;
|
||||
outStream = outputStream;
|
||||
}
|
||||
|
||||
@SuppressWarnings("UnusedAssignment")
|
||||
public int sendFile(String myFile) {
|
||||
RandomAccessFile in;
|
||||
|
||||
long length;
|
||||
String fileLengthResult;
|
||||
|
||||
int zipResult = gzipFile(myFile, false);
|
||||
if (zipResult == 0) {
|
||||
myFile = myFile + ".gz";
|
||||
} else {
|
||||
sendMsg("Filetransfer[" + fId + "]: can't gzip file");
|
||||
try {
|
||||
outStream.writeInt(0);
|
||||
fileLengthResult = inStream.readUTF();
|
||||
} catch (Exception e) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error" + e);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
try {
|
||||
in = new RandomAccessFile(myFile, "r");
|
||||
length = in.length();
|
||||
} catch (Exception g) {
|
||||
sendMsg("Filetransfer[" + fId + "]: can't read file" + g);
|
||||
try {
|
||||
outStream.writeInt(0);
|
||||
fileLengthResult = inStream.readUTF();
|
||||
} catch (Exception h) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error" + h);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
if (length > Integer.MAX_VALUE) {
|
||||
// File is too large
|
||||
sendMsg("Filetransfer[" + fId + "]: File is too large");
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
} else {
|
||||
int myFileLength = (int) length;
|
||||
sendMsg("Filetransfer[" + fId + "]: sending fille length: " + myFileLength);
|
||||
try {
|
||||
outStream.writeInt(myFileLength);
|
||||
fileLengthResult = inStream.readUTF();
|
||||
} catch (Exception i) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error" + i);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
if (fileLengthResult.equals(ok)) {
|
||||
try {
|
||||
sendMsg("Filetransfer[" + fId + "]: send a file...");
|
||||
byte b;
|
||||
for (int i = 0; i < myFileLength; i++) {
|
||||
b = in.readByte();
|
||||
outStream.writeByte(b);
|
||||
}
|
||||
in.close();
|
||||
File f = new File(myFile);
|
||||
f.delete();
|
||||
String fileTransferResult = inStream.readUTF();
|
||||
if (fileTransferResult.equals(failed)) {
|
||||
sendMsg("Filetransfer[" + fId + "]: sending file failed: " + fileTransferResult);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
} catch (Exception j) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error" + j);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
sendMsg("Filetransfer[" + fId + "]: sending file length failed: " + fileLengthResult);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int receiveFile(String myFile) {
|
||||
int fileLength;
|
||||
RandomAccessFile out;
|
||||
|
||||
sendMsg("Filetransfer[" + fId + "]: awaiting filelength ...");
|
||||
try {
|
||||
fileLength = inStream.readInt();
|
||||
} catch (IOException e) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error " + e);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
sendMsg("Filetransfer[" + fId + "]: file length = " + fileLength);
|
||||
if (fileLength > 0) {
|
||||
try {
|
||||
out = new RandomAccessFile(myFile + ".gz", "rw");
|
||||
} catch (IOException g) {
|
||||
sendMsg("Filetransfer[" + fId + "]: can't write to a file " + g);
|
||||
try {
|
||||
outStream.writeUTF(failed);
|
||||
} catch (Exception h) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error " + h);
|
||||
}
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
try {
|
||||
outStream.writeUTF(ok);
|
||||
} catch (Exception i) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error " + i);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
sendMsg("Filetransfer[" + fId + "]: awaiting file...");
|
||||
try {
|
||||
byte b;
|
||||
for (int i = 0; i < fileLength; i++) {
|
||||
b = inStream.readByte();
|
||||
out.write(b);
|
||||
}
|
||||
out.close();
|
||||
} catch (Exception j) {
|
||||
sendMsg("Filetransfer[" + fId + "]: file transfer failed " + j);
|
||||
try {
|
||||
outStream.writeUTF(failed);
|
||||
} catch (Exception k) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error " + k);
|
||||
}
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
try {
|
||||
outStream.writeUTF(ok);
|
||||
int gunzipResult = gunzipFile(myFile + ".gz", true);
|
||||
if (gunzipResult != 0) {
|
||||
sendMsg("Filetransfer[" + fId + "]: gunzip failed");
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
} catch (Exception l) {
|
||||
sendMsg("Filetransfer[" + fId + "]: stream error " + l);
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
sendMsg("Filetransfer[" + fId + "]: file transfer complete.");
|
||||
} else {
|
||||
try {
|
||||
outStream.writeUTF(failed);
|
||||
} catch (Exception f) {
|
||||
sendMsg("Filetransfer[" + fId + "]: file length invalid");
|
||||
cleanTmp(myFile);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int gzipFile(String myFile, boolean delSource) {
|
||||
int read;
|
||||
byte[] data = new byte[1024];
|
||||
sendMsg("Filetransfer[" + fId + "]: gzip file");
|
||||
try {
|
||||
File f = new File(myFile);
|
||||
GZIPOutputStream out;
|
||||
try (FileInputStream in = new FileInputStream(f)) {
|
||||
out = new GZIPOutputStream(new FileOutputStream(myFile + ".gz"));
|
||||
while ((read = in.read(data, 0, 1024)) != -1) {
|
||||
out.write(data, 0, read);
|
||||
}
|
||||
}
|
||||
out.close();
|
||||
if (delSource == true) {
|
||||
f.delete();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
sendMsg("Filetransfer[" + fId + "]: gzipping file failed " + e);
|
||||
return 1;
|
||||
}
|
||||
|
||||
sendMsg("Filetransfer[" + fId + "]: gzip file");
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int gunzipFile(String myGZFile, boolean delSource) {
|
||||
int read;
|
||||
byte[] data = new byte[1024];
|
||||
|
||||
sendMsg("Filetransfer[" + fId + "]: gunzip file");
|
||||
|
||||
try {
|
||||
File f = new File(myGZFile);
|
||||
FileOutputStream out;
|
||||
try (GZIPInputStream in = new GZIPInputStream(new FileInputStream(f))) {
|
||||
String myFile;
|
||||
if (myGZFile.endsWith(".gz")) {
|
||||
myFile = myGZFile.substring(0, myGZFile.length() - 3);
|
||||
} else {
|
||||
myFile = myGZFile;
|
||||
} out = new FileOutputStream(myFile);
|
||||
while ((read = in.read(data, 0, 1024)) != -1) {
|
||||
out.write(data, 0, read);
|
||||
}
|
||||
}
|
||||
out.close();
|
||||
if (delSource == true) {
|
||||
f.delete();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
sendMsg("Filetransfer[" + fId + "]: gunzipping file failed " + e);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void sendMsg(String msg) {
|
||||
if (debug == 1) {
|
||||
System.out.println(msg);
|
||||
}
|
||||
}
|
||||
|
||||
private void cleanTmp(String fileName) {
|
||||
try {
|
||||
new File(fileName).delete();
|
||||
} catch (Exception e) {
|
||||
sendMsg("can't clean tmp file: " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user