/** Das Interface Client, welches jeder Chatclient 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 Client extends Remote
{
    /** dient nur dazu festzustellen, ob der Client noch
     *  remote erreichbar ist.
     */
    public void lebtNoch() throws RemoteException;

    /** wird vom {@link Server} aufgerufen, um bei diesem 
     *  Client eine Nachricht, die an alle Teilnehmer
     *  ging, anzuzeigen.
     *  @param s die anzuzeigende Nachricht
     *  @param n die anzuzeigende Nachricht
     */
    public void nachricht(String s, String n) throws RemoteException;

    /** wird vom {@link Server} aufgerufen, um bei diesem 
     *  Client eine Nachricht, die nur an diesen Teilnehmer
     *  ging, anzuzeigen.
     *  @param s Name des sendenden Clients
     *  @param n die anzuzeigende Nachricht
     */
    public void privateNachricht(String s, String n) throws RemoteException;

    /** wird vom {@link Server} aufgerufen, um bei diesem 
     *  Client eine Nachricht, die nur an diesen Teilnehmer
     *  ging, anzuzeigen.
     *  @param s Name des Servers
     *  @param n die anzuzeigende Nachricht
     */
    public void serverNachricht(String s, String n) throws RemoteException;

    /** benachrichtigt den Teilnehmer über die Anmeldung eines
     *  neuen Teilnehmers.
     *  @param n der Name des neuen Teilnehmers
     */
    public void neuerTeilnehmer(String n) throws RemoteException;

    /** benachrichtigt den Teilnehmer über die Abmeldung eines
     *  Teilnehmers.
     *  @param s der Name des abgemeldeten Teilnehmers
     */
    public void teilnehmerAbgemeldet(String s) throws RemoteException;

    /** benachrichtigt den Teilnehmer darüber, dass ein anderer
     *  Teilnehmers vorübergehend nicht erreichbar ist.
     *  @param s der Name des nicht erreichbaren Teilnehmers
     */
    public void teilnehmerInaktiv(String s) throws RemoteException;

    /** benachrichtigt den Teilnehmer darüber, dass ein anderer
     *  Teilnehmer wieder erreichbar ist.
     *  @param s der Name des wieder erreichbaren Teilnehmers
     */
    public void teilnehmerAktiv(String s) throws RemoteException;
}
