package client;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Vector;

import server.ServerChatKommunikator;
import server.ServerSpielKommunikator;
import spiel.Spiel;

/**
 * Der ClientSpielEinleitungsKommunikator dient dem Server zur Kommunikation mit dem
 * Client während der Spieleinleitungsphase.
 *
 * Neu in 1.4:
 * Methode 
 *
 * Neu in 1.3: 
 * <ul><li>neuerSpieler hat als zweiten Parameter die Nummer</li>
 * <li>entferneSpieler hat nun als Parameter die Nummer anstatt des Namens</li>
 * <li>Interface erweitert Remote</li></ul>
 *
 * @version 1.4
 * @date 15.12.2004
 * @author ProgPrak-Team
 */
public interface ClientSpielEinleitungsKommunikator extends Remote {
    
    /**
     * übergibt dem Client den ChatKommunikator für ein konkretes Spiel (lokaler Chat)
     * @param serverChat der ChatKommunikator an den der Client seine Nachrichten schickt
     * @return der ClientChatKommunikator an den der Server Nachrichten für den Client schickt
     */
    public ClientChatKommunikator setzeSpielChat(ServerChatKommunikator serverChat) throws RemoteException;
    
    /**
     * Übergibt dem Client das gegenwärtige Spiel.
     * @param spiel eine Spielbeschreibung
     */
    public void zeigeSpiel(Spiel spiel) throws RemoteException;
    
    /**
     * Übergibt dem Client den Spielernamen eines Spieler der zum gegenwärtigen
     * Spiel hinzugekommen ist.
     *
     * @param name der Name des neuen Spielers
     * @param nummer die Nummer des neuen Spielers
     */
    public void neuerSpieler(String name, int nummer) throws RemoteException;
    
    /**
     * Informiert den Client wenn der entsprechende Spieler das Spiel
     * verlässt. 
     * @param nummer die Nummer des Spielers der das Spiel verlässt
     */
    public void entferneSpieler(int nummer) throws RemoteException;
    
    /**
     * Das Startsignal des Servers, wenn der Spielleiter das Spiel gestartet hat.
     * @param serverSpielKom der ServerSpielKommunikator dem der Client sämtliche Spielaktionen mitteilt 
     * @return der ClientSpielKommunikator, dem der Server alle Geschehnisse des Spiels mitteilt
     */
    public ClientSpielKommunikator start(ServerSpielKommunikator serverSpielKom) throws RemoteException;

    /**
     * Dient dem ServerSpielEinleitungsKommunikator dazu, einen evtl. Abbruch des Spiels 
     * in der Einleitungsphase den bereits angemeldeten Spielern mitzuteilen, bevor das
     * Spiel gestartet wurde.
     */   
    public void spielAbbruch() throws RemoteException; 
}
