package fr.umlv.lexico;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.util.Scanner;


public class LineTCPClient {
	private static final Charset TRANSFER_CHARSET = Charset.forName("ASCII");
	private final Socket s;

	public LineTCPClient(String serverName, int serverPort) throws UnknownHostException, IOException {
		this.s = new Socket(serverName, serverPort);
	}
	
	public void launch() {
		try {
			Scanner sc = new Scanner(System.in);
			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(),TRANSFER_CHARSET));
			BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), TRANSFER_CHARSET));
			while (sc.hasNextLine()) {
				String line = sc.nextLine();
				// sending to server
				out.write(line);
				out.newLine();
				out.flush();
				// receiving response
				String response = in.readLine();
				System.out.println(response);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				s.close();
			} catch (IOException e) {
				// Do nothing
			}
		}
	}
	
	public static void main(String[] args) throws NumberFormatException, UnknownHostException, IOException {
		if (args.length < 2) {
			System.err.println("Usage: java fr.umlv.lexico.LineTCPClient <serverName> <serverPort>");
			System.exit(0);
		}
		LineTCPClient client = new LineTCPClient(args[0],Integer.parseInt(args[1]));
		client.launch();
	}
}
