package echo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

/**
 * Talks to one echo client. One handler per client, each run by its own thread.
 */
public class EchoHandler implements Runnable {

	private Socket socket_;

	public EchoHandler ( Socket socket ) {
		socket_ = socket;
	}

	@Override
	public void run () {
		String who = Thread.currentThread().getName();
		System.out.println(who + " connected: " + socket_.getRemoteSocketAddress());
		try {
			BufferedReader in =
			    new BufferedReader(new InputStreamReader(socket_.getInputStream(),
			                                             StandardCharsets.UTF_8));
			PrintWriter out =
			    new PrintWriter(new OutputStreamWriter(socket_.getOutputStream(),
			                                           StandardCharsets.UTF_8));

			for ( ; true ; ) {
				String line = in.readLine();
				if ( line == null ) {
					break;
				}
				if ( line.equals("bye") ) {
					out.println("bye");
					out.flush();
					break;
				}
				out.println("echo: " + line);
				out.flush();
			}
		} catch ( IOException e ) {
			System.out.println(who + ": " + e.getMessage());
		} finally {
			try {
				socket_.close();
			} catch ( IOException e ) {}
		}
		System.out.println(who + " disconnected");
	}

}
