package client;

import java.util.Vector;

import server.ServerChatKommunikator;
import spiel.Spiel;

import java.rmi.Remote;
import java.rmi.RemoteException;

/** 
 * Der ClientKommunikator dient dem Server zur Kommunikation mit dem Client
 * in der Spielauswahlphase. D.h. nachdem der Client sich angemeldet hat,
 * bekommt er über dieses Interface die aktuellen Spiele vom Server übermittelt.
 *
 *  @version 1.2
 *  @author ProgPrak-Team
 */
public interface ClientKommunikator extends Remote{
    
    
    /**
     * Übergibt dem Client den ChatKommunikator für den globalen 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 setzeChat(ServerChatKommunikator serverChat) throws RemoteException;
    
    /** 
     * Übergibt dem Client einen Vector mit allen auf dem Server verfügbaren Spielen. 
     * @param spiele ein Vector mit Spiel-Objekten 
     */
    public void zeigeSpiele(Vector<Spiel> spiele) throws RemoteException;
    
    /**
     * Übergibt dem Client ein neues Spiel oder ein Spiel, das sich geändert hat.
     * Welcher Fall es ist, entscheidet sich darüber, ob der Name neu ist oder nicht.
     * @param spiel das Spiel das geupdated werden soll
     */
    public void updateSpiel(Spiel spiel) throws RemoteException;
    
    /**
     * Entfernt ein Spiel vom Client, wenn dieses Spiel auf dem Server 
     * nicht mehr existiert.
     * @param spielName der Name des Spiels
     */
    public void entferneSpiel(String spielName) throws RemoteException;

    /**
     * Informiert den Client, daß der Server abgeschaltet wird
     * @param grund der Grund der Beendigung des Servers
     */
    public void serverShutdown(String grund) throws RemoteException;  

    /** 
     *  Dient nur dazu, um festzustellen, ob der ClientKommunikator noch
     *  remote erreichbar ist (sollte nicht zu häufig aufgerufen werden)
     */
    public void lebtNoch() throws RemoteException;

    /**
     * Der Server kann damit Maßnahmen ergreifen, um einen wiederangemeldeten
     * Spieler in seine laufenden Partien zurückzubringen
     */
    public ClientSpielEinleitungsKommunikator partieWiederherstellen();

}
