package vs;

import java.io.InputStream;
import java.net.Socket;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

/**
 * Client for echo var.sockets.tcp.time.Time*Server service. Verbindet sich mit
 * dem Server und empfängt eine Repräsentation eines Zeitstempels. Das Format
 * des Zeitstempels kann entweder die Zeit in ms seit dem 01.01.1970 00:00:00
 * GMT als ASCII-Zeichen sein oder ein String, der die Zeit kompatibel zu ISO
 * 8601 enthält.
 *
 * @author Sandro Leuchter
 *
 */
public class TimeClient {

	/**
	 * main method: entrypoint to run
	 *
	 * @param args address of service to connect to (must be String[0]: host
	 *             (IP-address or DNS hostname), String[1]: port)
	 *
	 */
	public static void main(String[] args) {
		try (Socket socket = new Socket(args[0], Integer.parseInt(args[1])); InputStream in = socket.getInputStream()) {
			StringBuilder stringBuilder = new StringBuilder();

			int c;
			while ((c = in.read()) != -1) {
				stringBuilder.append((char) c);
			}

			// stringBuilder-Inhalt in ein Date-Objekt konvertieren und ausgeben
			DateFormat dateFormatter = DateFormat.getInstance();
			Date date = null;
			try {
				date = dateFormatter.parse(stringBuilder.toString());
			} catch (ParseException parseException) {
				try {
					date = new Date(Long.parseLong(stringBuilder.toString()));
				} catch (NumberFormatException numberException) {
					// weder verständliches Textformat, noch long-Zahl (ms. seit
					// 01.01.1970 00:00)
					// System.err.println(numberException);
				}
			}
			System.out.println("empfangen: \"" + stringBuilder.toString() + "\"");
			if (date != null) {
				System.out.println("gewandelt: " + date);
			} else {
				// weder verständliches Textformat, noch long-Zahl (ms. seit
				// 01.01.1970 00:00)
				System.err.println("es war nicht mögich ein Date-Objekt daraus zu erzeugen.");
			}
		} catch (Exception e) {
			System.err.println(e);
		}
	}
}
