Package bomberman.client

Source Code of bomberman.client.RealClient

package bomberman.client;

import bomberman.login.Bootstrap;

import java.io.Console;
import java.io.IOException;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.activation.ActivationException;


/**
* Client vero presente sul server e scaricato in fase preliminare
* attraverso il meccanismo di bootstrap.
*
* @author Federico Matera
*/
public class RealClient implements Runnable, Serializable {

    private Bootstrap authServer;


    /**
     * Costruttore senza parametri, serve se si scarica questa classe
     * con RMIClassLoader.
     */
    public RealClient() {
        this.authServer = null;
    }


    /**
     * Costruttore invocato dal server prima di inviare questa classe al client.
     * @param authServer Lo stub del server di autenticazione
     */
    public RealClient(Bootstrap authServer) {
        this.authServer = authServer;
    }


    /**
     * Implementazione del metodo run, permette all'utente di fare il login e,
     * nel caso fosse andato a buon fine, avviare la classe ritornata dal server di autenticazione.
     */
    public void run() {
        String username;
        String password;
        MobClient cli;

        try {
            Console console = System.console();
            username = console.readLine("username: ");
            password = new String(console.readPassword("password: "));

            System.out.println("> Connessione al server in corso, attendere...");
            cli = authServer.login(username, password);
        }
        catch (RemoteException re){
            System.out.println("% Server di autenticazione irraggiungibile.");
            re.printStackTrace();
            return;
        }


        try {
            cli.exec();
        }
        catch (NullPointerException npe){
            System.out.println("> Accesso vietato, password errata oppure l'utente risulta già connesso.");
        }
        catch (ActivationException ae){
            System.out.println("% Client activation error: " + ae.getMessage());
            ae.printStackTrace();

            // se c'è qualche errore di rete provo a disconnettermi presso il server
            // così da liberare il nickname
            try {
                authServer.logout(username);
            }
            catch (RemoteException re) {
                System.out.println("> Disconnessione automatica non riuscita.");
                re.printStackTrace();
            }
        }
        catch (IOException ioe){
            System.out.println("% Client IO error: " + ioe.getMessage());
            ioe.printStackTrace();

            try {
                authServer.logout(username);
            }
            catch (RemoteException re) {
                System.out.println("> Disconnessione automatica non riuscita.");
                re.printStackTrace();
            }
        }
        catch (ClassNotFoundException cnfe){
            System.out.println("% Client class not found error: " + cnfe.getMessage());
            cnfe.printStackTrace();

            try {
                authServer.logout(username);
            }
            catch (RemoteException re) {
                System.out.println("> Disconnessione automatica non riuscita.");
                re.printStackTrace();
            }
        }
    }
}
TOP

Related Classes of bomberman.client.RealClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.