Class CHATSERVER

java.lang.Object
  extended by CHATSERVER

public class CHATSERVER
extends java.lang.Object

Implementierung eines Chatservers, Auslagerung der Clientprozesse in einen Thread
Jeder Zugriff auf die Liste clientprozesse muss snychronisiert sein.


Field Summary
private  java.util.ArrayList<CLIENTPROZESS> clientprozesse
          Liste der serverseitigen Prozesse, die über die Clientverbindung kommunizieren.
private static int maximaleclientanzahl
          die maximal mögliche Anzahl an Clients
private  int port
          Portnummer des Ports, auf dem die Verbindungen etabliert sind
private  java.net.ServerSocket serverSocket
          bidirektionale Schnittstelle zur Netzwerkprotokoll-Implementierung des Servers
 
Constructor Summary
CHATSERVER(java.lang.String[] args)
          Konstruktor des Servers
 
Method Summary
 void AnAlleSenden(java.lang.String nachricht)
          sendet den String nachricht an alle clientprozesse der Liste
private  void AufNeuenClientWarten()
          wartet auf eine eingehende Clientverbindung und erzeugt für diese eine Verbindung
 void ClientProzessEntfernen(CLIENTPROZESS clientprozess)
          entfernt den clientprozess von der Liste der Clientprozesse und benachrichtigt alle Chatteilnehmer
private  CLIENTPROZESS ClientProzessGeben(java.lang.String spitzname)
          ermittelt über den Spitznamen den zugehörigen Clientprozess
 boolean ClientProzessHinzufuegen(CLIENTPROZESS clientprozess)
          fügt den clientprozess zur Liste der Clientprozesse hinzu und benachrichtigt alle Chatteilnehmer falls die maximale Anzahl der zulässigen Verbindungen erreicht ist, gibt ist der Rückgabewert false und der clientprozess wird beendet
private  void ClientVerbindungAufbauen(java.net.Socket clientSocket)
          baut eine Verbindung zum Client auf, um dessen Namen zu erfragen.
static void main(java.lang.String[] args)
          Hauptprogramm zum Erzeugen des Serverobjekts
 void PrivateNachrichtSenden(CLIENTPROZESS clientprozess, java.lang.String nachricht)
          sendet den String nachricht an clientprozess
 boolean PrivateNachrichtSenden(java.lang.String spitzname, java.lang.String nachricht)
          versucht den String nachricht an den clientprozess mit dem angegeben Spitznamen zu senden, falls kein Clientprozess mit einem solchen Namen vorhanden ist gibt die funktion false zurück
private  void ServerStarten()
          Port abfragen und den Serversocket erzeugen
 boolean SpitznameVorhanden(java.lang.String spitzname)
          prüft ob der Spitzname bereits vorhanden ist.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

serverSocket

private java.net.ServerSocket serverSocket
bidirektionale Schnittstelle zur Netzwerkprotokoll-Implementierung des Servers


port

private int port
Portnummer des Ports, auf dem die Verbindungen etabliert sind


maximaleclientanzahl

private static int maximaleclientanzahl
die maximal mögliche Anzahl an Clients


clientprozesse

private java.util.ArrayList<CLIENTPROZESS> clientprozesse
Liste der serverseitigen Prozesse, die über die Clientverbindung kommunizieren.

Constructor Detail

CHATSERVER

public CHATSERVER(java.lang.String[] args)
           throws java.io.IOException
Konstruktor des Servers

Throws:
java.io.IOException - eine Ausnahme tritt auf falls:
- der Server nicht gestartet werden kann (weil beispielsweise der Port nicht frei ist)
- die Clientverbindung gestört bzw. unterbrochen wurde.
Method Detail

ServerStarten

private void ServerStarten()
                    throws java.io.IOException
Port abfragen und den Serversocket erzeugen

Throws:
java.io.IOException

AufNeuenClientWarten

private void AufNeuenClientWarten()
                           throws java.io.IOException
wartet auf eine eingehende Clientverbindung und erzeugt für diese eine Verbindung

Throws:
java.io.IOException

ClientVerbindungAufbauen

private void ClientVerbindungAufbauen(java.net.Socket clientSocket)
                               throws java.io.IOException
baut eine Verbindung zum Client auf, um dessen Namen zu erfragen. falls die maximale Anzahl der zulässigen Verbindungen erreicht ist, wird die Verbindung nur kurzzeitig aufgebaut, um das Stoppsignal für den Client zu senden

Parameters:
clientSocket - der Socket des Clients
Throws:
java.io.IOException

ClientProzessHinzufuegen

public boolean ClientProzessHinzufuegen(CLIENTPROZESS clientprozess)
fügt den clientprozess zur Liste der Clientprozesse hinzu und benachrichtigt alle Chatteilnehmer falls die maximale Anzahl der zulässigen Verbindungen erreicht ist, gibt ist der Rückgabewert false und der clientprozess wird beendet

Parameters:
clientprozess - der Clientprozess, der hinzugefügt werden soll
Returns:
true bei Erfolg, wird false zurückgegeben, so wird der Clientprozess beendet.

ClientProzessEntfernen

public void ClientProzessEntfernen(CLIENTPROZESS clientprozess)
entfernt den clientprozess von der Liste der Clientprozesse und benachrichtigt alle Chatteilnehmer

Parameters:
clientprozess - der Clientprozess, der entfernt werden soll.

ClientProzessGeben

private CLIENTPROZESS ClientProzessGeben(java.lang.String spitzname)
ermittelt über den Spitznamen den zugehörigen Clientprozess

Returns:
CLIENTPROZESS clientprozess oder null, falls kein Clientprozess mit einem solchen Spitznamen gefunden wurde.

SpitznameVorhanden

public boolean SpitznameVorhanden(java.lang.String spitzname)
prüft ob der Spitzname bereits vorhanden ist.

Returns:
true, falls Spitzname vorhanden

PrivateNachrichtSenden

public void PrivateNachrichtSenden(CLIENTPROZESS clientprozess,
                                   java.lang.String nachricht)
sendet den String nachricht an clientprozess

Parameters:
clientprozess - der Empfänger der Nachricht
nachricht - der Text der Nachricht

PrivateNachrichtSenden

public boolean PrivateNachrichtSenden(java.lang.String spitzname,
                                      java.lang.String nachricht)
versucht den String nachricht an den clientprozess mit dem angegeben Spitznamen zu senden, falls kein Clientprozess mit einem solchen Namen vorhanden ist gibt die funktion false zurück

Returns:
boolean gibt an, ob die Nachricht versandt werden konnte.

AnAlleSenden

public void AnAlleSenden(java.lang.String nachricht)
sendet den String nachricht an alle clientprozesse der Liste

Parameters:
nachricht - die Nachricht, die an alle Chatteilnehmer geschickt wird.

main

public static void main(java.lang.String[] args)
                 throws java.io.IOException
Hauptprogramm zum Erzeugen des Serverobjekts

Parameters:
args - keine Parameter beim Programmaufruf erforderlich
Throws:
java.io.IOException