From 6062a4912176eca626cc83d6c3e41b02c86c7bd6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz>
Date: Mon, 29 Mar 2021 10:45:33 +0200
Subject: [PATCH] Server

---
 .../java/koz01/java2/lab08/IndexReader.java   | 11 +++++
 .../koz01/java2/lab08/RemoteIndexServer.java  | 47 +++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 src/main/java/koz01/java2/lab08/RemoteIndexServer.java

diff --git a/src/main/java/koz01/java2/lab08/IndexReader.java b/src/main/java/koz01/java2/lab08/IndexReader.java
index 252eefd..5286608 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 0000000..77b4d74
--- /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();
+			}
+		}
+	}
+
+}
-- 
GitLab