Skip to content
Snippets Groups Projects
Commit 1b40e688 authored by Jan Kožusznik's avatar Jan Kožusznik
Browse files

tasks: 1 - 3

parent fa49f347
Branches
No related merge requests found
package lab07;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;
import java.nio.file.Path;
import java.nio.file.Paths;
......@@ -25,7 +28,9 @@ class HttpHandler {
try {
request = getRequest(channel);
String resource = getResource(request);
CompletableFuture<Void> future = transferFile(resource, channel);
//task: #3
future.handle((r,exc) -> { close(channel); return null;});
} catch (IOException e) {
writeStatus(Status.INTERNAL_SERVER_ERROR, channel);
writeString("", channel);
......@@ -35,14 +40,31 @@ class HttpHandler {
}
}
private CompletableFuture<Void> transferFile(String resource, SocketChannel channel) {
return null;
private void close(SocketChannel channel) {
try {
channel.close();
} catch (IOException e) {
log.warn("close", e);
}
}
private CompletableFuture<Void> transferFile(final String resource,final SocketChannel channel) {
//task: #2
return CompletableFuture.runAsync(() -> doTransferFile(resource, channel));
}
//task: #1
private void doTransferFile(final String resource, SocketChannel channel) {
@SuppressWarnings("unused")
Path filePath = getFilePath(resource);
//TODO implement data transfer from file to socket
try(RandomAccessFile raf = new RandomAccessFile(filePath.toFile(), "rw"); FileChannel fc = raf.getChannel()) {
writeStatus(Status.OK, channel);
fc.transferTo(0, raf.length(),channel);
} catch (FileNotFoundException e) {
writeStatus(Status.NOT_FOUND, channel);
writeString("'%s' not found".formatted(resource), channel);
} catch (IOException e) {
log.error("read file:", e);
}
}
private Path getFilePath(String resource) {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment