/** Das Interface Server, welches jeder Chatserver implementiert.
 *  Vorerst nur in unsicherer Ausführung. Wird später verändert,
 *  um Identitätdiebstahl zu vermeiden. Dabei werden möglichst nur
 *  die Übergabeparameter von {@link String} auf eine selbst zu
 *  definierende Klasse umgestellt.
 *
 *  @version 1.0
 *  @author ProgPrak-Team
 */

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


public interface Server extends Remote
{
    /** wird von einem Client aufgerufen, um sich beim Chat
     *  anzumelden.
     *  @param c der anzumeldende {@link Client}
     *  @param name ein Name, über den der Client identifiziert wird
     *  @return liefert true, falls Anmeldung erfolgreich war
     */
    public boolean anmelden(Client c, String name) throws RemoteException;

    /** wird von einem Client aufgerufen, um sich beim Chat
     *  abzumelden.
     *  @param name der Name des abzumeldenden Clients
     */
    public void abmelden(String name) throws RemoteException;

    /** veranlasst den Server, an alle angemeldeten Clients eine
     *  Nachricht zu schicken.
     *  @param sender der Name des schickenden Teilnehmers
     *  @param nachricht die Nachricht
     */
    public void anAlleSenden(String sender, String nachricht) throws RemoteException;

    /** veranlasst den Server, an einen angemeldeten Client eine
     *  Nachricht zu schicken.
     *  @param sender der Name des schickenden Teilnehmers
     *  @param empfaenger der Name des empfangenden Teilnehmers
     *  @param nachricht die Nachricht
     *  @return liefert false, falls der Empfänger nicht angemeldet ist
     */
    public boolean anEinenSenden(String sender, String empfaenger, String nachricht) throws RemoteException;

}
