diff --git a/src/main/java/koz01/java2/lab08/IndexReader.java b/src/main/java/koz01/java2/lab08/IndexReader.java index 252eefd640f10ce86822c8a1bc48c594744ee1d8..5286608aff0dfc2551e34bda0aede5fefa8f1173 100644 --- a/src/main/java/koz01/java2/lab08/IndexReader.java +++ b/src/main/java/koz01/java2/lab08/IndexReader.java @@ -35,6 +35,17 @@ public class IndexReader { } + public byte[] readData(int index) { + try (FileChannel fc = FileChannel.open(getFile())) { + return getData(fc, index); + } + catch (IOException exc) { + log.error("read", exc); + return null; + } + + } + private Path getFile() throws IOException { Path LocalFile = Files.createTempFile(null, null).getParent().resolve( IMAGE_NAME); diff --git a/src/main/java/koz01/java2/lab08/RemoteIndexServer.java b/src/main/java/koz01/java2/lab08/RemoteIndexServer.java new file mode 100644 index 0000000000000000000000000000000000000000..77b4d74e05bf29690308033e10e5a04261db2fc1 --- /dev/null +++ b/src/main/java/koz01/java2/lab08/RemoteIndexServer.java @@ -0,0 +1,47 @@ +package koz01.java2.lab08; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.util.Iterator; + +import lombok.extern.log4j.Log4j2; + +@Log4j2 +public class RemoteIndexServer { + + public static void main(String[] args) throws IOException { + Selector selector = Selector.open(); + + ServerSocketChannel ssc = ServerSocketChannel.open(); + ssc.bind(new InetSocketAddress(Integer.parseInt(args[0]))); + ssc.configureBlocking(false); + ssc.register(selector, SelectionKey.OP_ACCEPT); + while (true) { + int numberOfKeys = selector.select(); + if (numberOfKeys == 0) { + continue; + } + Iterator<SelectionKey> keys = selector.selectedKeys().iterator(); + while (keys.hasNext()) { + SelectionKey sk = keys.next(); + if (sk.channel() == ssc) { + SocketChannel sch = ssc.accept(); + log.info("client connected {}", sch.getRemoteAddress()); + // TODO register sch + } + else { + SocketChannel sc = (SocketChannel) sk.channel(); + int index = 0;// TODO get index of image + byte []data = new IndexReader().readData(index); + // TODO send data.lenght and data + } + keys.remove(); + } + } + } + +}