use of io.xol.chunkstories.net.Connection.PendingDownload in project chunkstories by Hugobros3.
the class PacketReceiveFile method process.
@Override
public void process(PacketSender sender, DataInputStream in, PacketReceptionContext processor) throws IOException, PacketProcessingException {
if (!(processor instanceof ClientPacketsContext))
return;
// ClientPacketsContext cppi = (ClientPacketsContext)processor;
String fileTag = in.readUTF();
long fileLength = in.readLong();
if (fileLength > 0) {
PacketsContextCommon context = (PacketsContextCommon) processor;
PendingDownload pendingDownload = context.getConnection().getLocationForExpectedFile(fileTag);
if (pendingDownload == null)
throw new IOException("Received unexpected PacketFile with tag: " + fileTag);
// Class to report back the download status to whoever requested it via the onStart callback
PacketFileDownloadStatus status = new PacketFileDownloadStatus((int) fileLength);
if (pendingDownload.a != null)
pendingDownload.a.onStart(status);
long remaining = fileLength;
FileOutputStream fos = new FileOutputStream(pendingDownload.f);
byte[] buffer = new byte[4096];
while (remaining > 0) {
long toRead = Math.min(4096, remaining);
System.out.println("Working ! ...");
// cppi.getConnection().getCurrentlyDownloadedFileProgress().setStepText("Downloading "+fileTag+", "+(fileLength - remaining)/1024+"/"+fileLength/1024+"kb");
int actuallyRead = in.read(buffer, 0, (int) toRead);
fos.write(buffer, 0, (int) actuallyRead);
remaining -= actuallyRead;
status.downloaded += actuallyRead;
}
status.end.release();
fos.close();
}
}
Aggregations