Search in sources :

Example 1 with PendingDownload

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();
    }
}
Also used : PendingDownload(io.xol.chunkstories.net.Connection.PendingDownload) FileOutputStream(java.io.FileOutputStream) PacketsContextCommon(io.xol.chunkstories.net.PacketsContextCommon) IOException(java.io.IOException) ClientPacketsContext(io.xol.chunkstories.client.net.ClientPacketsContext)

Aggregations

ClientPacketsContext (io.xol.chunkstories.client.net.ClientPacketsContext)1 PendingDownload (io.xol.chunkstories.net.Connection.PendingDownload)1 PacketsContextCommon (io.xol.chunkstories.net.PacketsContextCommon)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1