package TcpExamples;

import java.io.*;
import java.net.*;
//import java.time.LocalTime; // conversion?

/**
 * This is a slightly different client. It establishes a connection
 * to the server, then checks how long it takes to read the single
 * line it expects.
 * 
 * @author mcgredo
 */
public class TcpExample4Client 
{
    static int MAX_LOOP_COUNT = 4;
    
    public static void main(String[] args) 
    {
        try
        {
			System.out.println("TcpExample4Client start, loop " + MAX_LOOP_COUNT + " times");
			System.out.println("==================================================");
			for (int loopCount=1; loopCount <= MAX_LOOP_COUNT; loopCount++) // loop then exit
			{
				System.out.println("TcpExample4Client creating socket #" + loopCount + "...");

				// We request an IP to connect to ("localhost") and
				// port number at that IP (2317). This establishes
				// a connection to that IP in the form of the Socket
				// object; the server uses a ServerSocket to wait for
				// connections.This particualar example is interacting
				// with what it expects is a server that writes a single text
				// line after 10 sec.
				long startTime = System.currentTimeMillis();

                // open a socket for each loop
				Socket socket = new Socket("localhost", 2317);

				// Setup.  Read the single line written by the server.
				// We'd do things a bit differently if many lines to be read
				// from the server, instead of one only.
				InputStream       is  = socket.getInputStream();
				InputStreamReader isr = new InputStreamReader(is);
				BufferedReader     br = new BufferedReader(isr);
System.out.println("client point 1...");
				String serverMessage = br.readLine(); // blocks?
System.out.println("client point 2...");
				long   readTime = System.currentTimeMillis();
				long timeLength = readTime - startTime;

				System.out.println("TcpExample4Client: message received from server='" + serverMessage + "'");
				System.out.println("TcpExample4Client: time msec required for read=" + timeLength);
				System.out.println("==================================================");
				// To push this further, launch multiple copies of TcpExample4Client simultaneously
			}
			System.out.println("TcpExample4Client complete");
            // main method now exits
        }
        catch(IOException e)
        {
            System.out.println("Problem with TcpExample4Client networking:networking:"); // describe what is happening
            System.out.println("Error: " + e);
            // Provide more helpful information to user if exception occurs due to running twice at one time
            if (e instanceof java.net.BindException)
                System.out.println("*** Be sure to stop any other running instances of programs using this port!");
        }
    }
}