package server;

import java.rmi.RemoteException;

import spiel.Spiel;

/** ServerSpielLeiterKommunikator dient zur Administrierung eines Spiels. 
 *  Der Client bekommt {@code ServerSpielLeiterKommunikator} nach Erzeugen 
 *  eines neues Spiels. Der Client kann die Attribute für sein Spiel updaten.
 *  Er ist automatisch in dem erzeugten Spiel. Er kann aber dieses Spiel 
 *  verlassen oder beobachten.    
 *   
 *  @version 1.2
 *  @author ProgPrak-Team
 */

public interface ServerSpielLeiterKommunikator extends ServerSpielEinleitungsKommunikator {
    
    /** Client setzt neues Spiel-Objekt für sein Spiel
     * 
     * @param spiel das Spiel das gespielt werden soll
     * @throws RemoteException
     * @return true, wenn der Vorschlag vom Server akzeptiert wird, sonst false. Der Server ignoriert das Ergebnis von spiel.getSpielernamen()
     */
    public boolean setzeSpiel(Spiel spiel) throws RemoteException;

	
    /**Client setzt, ob er sein Spiel beobachten möchte. Standard ist,
     * dass er selber mitspielt.
     * 
     * @param beobachten
     * @throws RemoteException
     */
    public void setzeBeobachten(boolean beobachten) throws RemoteException;	
    
    /** Der Spielleiter  meldet, dass das Spiel fertig konfiguriert ist.
     * Wenn alle Mitspieler da sind bekommen er und alle andere Mitspieler
     * (und Beobachter) ihren persönlichen ServerSpielKommunikator für
     * dieses Spiel.
     * 
     * @return ServerSpielKommunikator für gestartetes Spiel
     * @throws RemoteException
     */
    public ServerSpielKommunikator spielStarten() throws RemoteException;
}
