/* SimpleMTServer.java */

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

public class SimpleMTServer extends Thread {
  protected Socket client ;

  public SimpleMTServer( Socket socket ) {
    System.out.println( "Arrivato un nuovo client da " + socket.getInetAddress ()) ;
    client = socket ;
  }

  public void run() {
    try {
      InputStream i = client.getInputStream ();
      OutputStream o = client.getOutputStream ();
      PrintStream p = new PrintStream (o) ;
      p.println("BENVENUTI.");
      p.println("Questo e' il SimpleMTServer :-)") ;
      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 SimpleMTServer sarebbe ;-)" ) ;                
            } else if ( QuitCommand.equalsIgnoreCase( command.toString() ) ) { 
                p.println( "Grazie per aver usato SimpleMTServer ;-)" ) ;
                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) ;
      }
    } catch (IOException e) {
        e.printStackTrace() ;
    } finally {
      System.out.println ("Connessione chiusa con " + client.getInetAddress ());
      try {
        client.close ();
      } catch (IOException e) {
        e.printStackTrace() ;
      }
    }
  }

  public static void main (String args[]) throws IOException {
    int port = 0 ;
    Socket client ;
    
    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() ) ;
        
    while( true ) {
        System.out.println ("In attesa di connessioni...");
        client = server.accept() ;
        System.out.println ("Richiesta di connessione da " + client.getInetAddress ());
        (new SimpleMTServer( client )).start() ;
    }
  }
}
