/* SimpleServer.java */

import java.net.*;
import java.io.*;

public class SimpleServer {
  public static void main (String args[]) throws IOException {
    int port = 0 ;
    if (args.length == 1)
      port = Integer.parseInt( args[0] ) ;

    System.out.println ("Server in partenza sulla porta " + port);
    ServerSocket server = new ServerSocket (port);
    System.out.println ("Server partito sulla porta " + server.getLocalPort() ) ;

    System.out.println ("In attesa di connessioni...");
    Socket client = server.accept ();
    System.out.println ("Richiesta di connessione da " + client.getInetAddress ());

    /* il server viene chiuso, ma la connessione col client rimane attiva */
    server.close ();

    try {
      InputStream i = client.getInputStream ();
      OutputStream o = client.getOutputStream ();
      PrintStream p = new PrintStream (o) ;
      p.println("BENVENUTI.");
      p.println("Questo e' il SimpleServer :-)") ;
      p.println () ;
      p.println("digitare HELP per la lista di servizi disponibili" ) ; 

      int x;
      ByteArrayOutputStream command = new ByteArrayOutputStream() ;
      String HelpCommand = new String( "HELP" ) ;
      String QuitCommand = new String( "QUIT" ) ;
      while ((x = i.read ()) > -1) {
        o.write (x);        
        if( x == 13 ) { /* newline */
            p.println() ;
            if( HelpCommand.equalsIgnoreCase( command.toString() ) ) {
                p.println( "Il solo servizio disponibile e' l'help," ) ;
                p.println( "e QUIT per uscire." ) ;
                p.println( "Altrimenti che SimpleServer sarebbe ;-)" ) ;                
            } else if ( QuitCommand.equalsIgnoreCase( command.toString() ) ) { 
                p.println( "Grazie per aver usato SimpleServer ;-)" ) ;
                p.println( "Alla prossima. BYE" ) ;
                try { 
                    Thread.sleep( 1000 ) ;
                } finally {
                    break ;
                }
            } else {
                p.println( "Comando non disponibile |-(" ) ;
                p.println( "Digitare HELP per la lista dei servizi" ) ;
            }
            command.reset() ;
        } else if ( x != 10 ) /* carriage return */
            command.write(x) ;
      }
    } finally {
      System.out.println ("Connessione chiusa");
      client.close ();
    }
  }
}
