package TcpExamples;

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

/**
 * This client program establishes a socket connection to the dispatch server,
 * then checks how long it takes to read the single line it expects.
 *
 * @author Don McGregor
 * @author Don Brutzman
 * @author MV3500 class
 */
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);

                String serverMessage = br.readLine(); // blocks
                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!");
            }
        }
    }
}