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.   
 *
 *  Neu gegenüber 1.2: 
 *  <ul><li>setzeBeobachten nun in setzeSpiel integriert</li>
 *  <li>spielStarten() hat nun Ergebnistyp void und soll auf nichts warten</li>
 *  <li>setzeSpiel wirft SpielInakzeptabelException</li></ul>
 *   
 *  @version 1.4
 *  @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.
     * Der Server ignoriert das Ergebnis von spiel.getSpielernamen().     
     * @param beobachten ob er sein Spiel nur beobachten möchte.
     * Standard ist, dass er selber mitspielt.
     * @throws SpielInakzeptabelException wenn der Server das vorgeschlagene
     * Spiel nicht annehmen kann
     */
    public void setzeSpiel(Spiel spiel, boolean beobachten) throws RemoteException, SpielInakzeptabelException;

    
    /** Der Spielleiter meldet, daß das Spiel fertig konfiguriert ist und
     *  daß es damit von der Server-Seite gestartet werden kann, wenn alle
     *  Mitspieler da sind.
     * 
     */
    public void spielStarten() throws RemoteException;
}
