package main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* @author v.chibrikov
*/
public class Main {
private static final long TIME_TO_WORK = TimeUnit.SECONDS.toMillis(10);
private static final int CLIENTS_NUMBER = 1;
public static void main(String[] args) throws Exception {
int port = 5050;
ExecutorService executor = Executors.newFixedThreadPool(CLIENTS_NUMBER);
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server started on port: " + port);
long startTime = new Date().getTime();
while (new Date().getTime() < startTime + TIME_TO_WORK) {
executor.submit(new MirrorSocketRunnable(serverSocket.accept()));
}
}
executor.awaitTermination(1, TimeUnit.MINUTES);
executor.shutdown();
System.out.println("Bye.");
}
private static class MirrorSocketRunnable implements Runnable {
private final Socket clientSocket;
private MirrorSocketRunnable(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
try (PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {
String inputLine;
String outputLine;
int lineIndex = 0;
while ((inputLine = in.readLine()) != null) {
//System.out.println("Message from client: " + inputLine);
outputLine = inputLine;
out.println(outputLine);
++lineIndex;
if (outputLine.equals("Bye."))
break;
}
System.out.println("Lines processed: " + lineIndex);
} catch (IOException e) {
System.out.println(e.getMessage());
System.exit(1);
}
}
}
}