diff options
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java')
-rw-r--r-- | src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java b/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java index 546094a..b35088b 100644 --- a/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java +++ b/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java @@ -1,5 +1,6 @@ package org.openslx.imagemaster.serverconnection; +import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; @@ -115,7 +116,8 @@ public class ConnectionHandler implements IncomingEvent public void incomingUploader( Uploader uploader ) throws IOException { // try to read meta data - if ( !uploader.readMetaData() ) return; + if ( !uploader.readMetaData() ) + return; String token = uploader.getToken(); log.debug( "Got token :'" + token + "'" ); // check token to identify the client @@ -131,14 +133,18 @@ public class ConnectionHandler implements IncomingEvent uploader.close(); return; } - + List<Integer> blocks = connections.get( token ).client.getLastRequestedBlocks( token ); + String fileName = connections.get( token ).filepath; + long fileSize = new File( fileName ).length(); + long actual; for ( Integer block : blocks ) { - uploader.sendRange( block*Globals.blockSize, (block+1)*Globals.blockSize - 1 ); - uploader.sendFile( connections.get( token ).filepath ); - uploader.close(); + actual = block * Globals.blockSize; + uploader.sendRange( (int)actual, ( ( fileSize - actual ) < Globals.blockSize ) ? (int)fileSize - 1 : ( block + 1 ) * Globals.blockSize - 1 ); // TODO: change this int into long + uploader.sendFile( fileName ); } - + uploader.close(); + } /** @@ -147,9 +153,8 @@ public class ConnectionHandler implements IncomingEvent @Override public void incomingDownloader( Downloader downloader ) throws IOException { + log.debug( "Client wants to upload" ); int startOfRange = 0; - int endOfRange = 0; - int diffOfRange = 0; String token = ""; // try to read meta data while ( downloader.readMetaData() ) { @@ -161,10 +166,11 @@ public class ConnectionHandler implements IncomingEvent return; } - // get range startOfRange = downloader.getStartOfRange(); - endOfRange = downloader.getEndOfRange(); - diffOfRange = downloader.getDiffOfRange(); + + if ( downloader.getDiffOfRange() <= 0 ) { + return; + } // check if he was a uploading client if ( connections.get( token ).type == Connection.DOWNLOADING ) { @@ -172,19 +178,15 @@ public class ConnectionHandler implements IncomingEvent downloader.close(); return; } + + int blockNumber = startOfRange / Globals.blockSize; + UploadingImage image = connections.get( token ).image; + image.setNeedsCheck( blockNumber ); + image.increaseTransmittedTimes( blockNumber ); + log.debug( "Block " + blockNumber + " was transmitted " + image.getTimesTransmitted( blockNumber ) + " time(s)." ); downloader.setOutputFilename( connections.get( token ).filepath ); downloader.readBinary(); - - // calculate and register the incoming blocks - if ( diffOfRange == 0 ) - return; - - for ( int i = startOfRange / Globals.blockSize; i < endOfRange / Globals.blockSize; i += Globals.blockSize ) { - UploadingImage image = connections.get( token ).image; - image.setNeedsCheck( i ); - image.increaseTransmittedTimes( i ); - } } downloader.close(); } |