summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/serverconnection/ConnectionHandler.java44
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();
}