package cmdserver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.net.InetSocketAddress;
import java.nio.channels.Channels;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;

public class Server {
  private static final int MAX_CONNECTION = 12;
  
  public static void listen(int port) throws IOException {    
    ServerSocketChannel serverChannel = ServerSocketChannel.open();
    serverChannel.bind(new InetSocketAddress(port));
    for(int i = 0; i < MAX_CONNECTION; i++) {
      new Thread(() -> {
          for(;;) {
            try(SocketChannel channel = serverChannel.accept()) {
              try (Reader socketReader = Channels.newReader(channel, "US-ASCII");
                   BufferedReader reader = new BufferedReader(socketReader);
                   Writer writer = Channels.newWriter(channel, "US-ASCII")) {
                String line;
                while((line = reader.readLine()) != null) {
                  String result = "service " + line;
                  writer.write(result);
                  writer.write('\n');
                  writer.flush();
                }
              } catch(IOException e) {
                System.err.println(e.getMessage());
                continue; // try to accept a new connection
              }
            } catch(IOException e) {
              System.err.println(e.getMessage());
              break;  // accept error, we are morons
            }
          }
      }).start();
    }
  }
}
