//Questo programma lancia il Server sul webserver che aspetta la

//richiesta di connessione dall'applet Gilotalk per attivare la talk



import java.net.ServerSocket;

import java.net.Socket;

import java.net.InetAddress;

import java.io.*;

import java.util.Date;



class ServerGilotalk {

	public static void main(String args[]) {

		int port = 5528;

		try {

			// create the server socket

			ServerSocket readServer = new ServerSocket(port);
		      InetAddress iadd = readServer.getInetAddress();
		      String hname = iadd.getHostName();
			System.out.println("Server Socket created on " +hname+ " to port " +port);

			System.out.println("Waiting for a connection...");



			// wait for a connection

			Socket connection = readServer.accept();

			InetAddress clientaddr = connection.getInetAddress();



			Date date = new Date();

			System.out.println("\nAccepted connection with " + 
					clientaddr.getHostName() + "\n" + date.toString());



			// set up the streams

			InputStream inStream = connection.getInputStream();
			BufferedReader dis = new BufferedReader(new InputStreamReader(inStream)); 


			BufferedReader sis = new BufferedReader(new InputStreamReader(System.in)); 


			OutputStream outStream = connection.getOutputStream();

			PrintWriter ps = new PrintWriter(outStream,true);

			System.out.println("\nReading the guest name");

			//read the guest name

			String guest = dis.readLine();



			if (guest.startsWith("~Gilo-Stop~")) {

				System.out.println("\nGuest's browser has fallen down\n");

				System.exit(1);

			}



			System.out.println("\nGuest name is " + guest);

			ps.println("OK " + guest + ", I'll be on line soon, you can send me your first message.");

			ps.flush();


			// while input does not equal 'exit' output to socket

			boolean done = false;

			while (!done) {

				String line = dis.readLine();

				if (!line.startsWith("~Gilo-Stop~")) {

					System.out.println(guest + ">\n" + line);

					System.out.println("Gilo> ");

					String mine = sis.readLine();

					ps.println(mine);
					ps.flush();

				}

				else

					done = true;

			}



			System.out.println("\n"+guest+" has closed the connection.\n");

			// close the server

			readServer.close();

		} catch (Exception e) {

			System.out.println("\nThe client has closed the connection.\n");

			e.printStackTrace();

			System.exit(1);

		}

	}

}