VoiD' Java World - [Chat]

Chat


Dies ist mein erstes kleines Chat Programm. Es funktioniert sowohl im LAN als auch im Internet. Es verwaltet beliebig viele Channels und kann im kleinen Rahmen auch administriert werden.

Programm starten

1. BASIS
1.1. Um was geht es
1.2. Was wird benötigt
1.3. Start

2. SERVER einrichten
2.1. Server-Konfigurationsfile anpassen
2.2. Einträge im Konfigurationsfile »Server.ini«
2.3. Anpassen der Startdatei
2.4. Parameter der Startdatei
2.5. Anpassen des Java Runtime Environment (JRE)
2.6. Einrichten bei mehreren IP-Adressen

3. CLIENT einrichten
3.1. Client-Konfigurationsfile anpassen
3.2. Einträge im Konfigurationsfile »Client.ini«
3.3. Anpassen der Startdatei

4. END
4.1. Programm / Version
4.2. Freigabe und Quellcode
4.3. Thanx
4.4. Hilfe

5. VERSION HISTORY
5.1. Version 1.0.1
5.2. Version 1.0.2

1.0 BASIS

1.1. Um was geht es

Chat ist ein kleines Programm, in dem ein Chat-Server und ein entsprechender Client enthalten ist. Personen an unterschiedlichen Lokationen (Internet und auch LAN) können sich wie im IRC miteinander unterhalten. Die einzelnen Chat-Räume (Channels) können in einen sogenannten "Einladungsmodus" gesetzt oder auch "moderiert" werden. Der Server verwaltet grundsätzlich eine unbestimmte Anzahl an Channels und Benutzern.

1.2 Was wird benötigt

Da der Chat in Java entwickelt wurde, ist eine Java Runtime Environment (JRE) oder ein Java Development Kit (JDK) zum Ausführen des Chats notwendig. Es muss beachtet werden, dass mindestens die Version 1.3.1 des JRE/JDK eingesetzt wird.
Downloads des JRE/JDK gibt es unter:

1.3 Start

Leider kann die Anwendung nicht mit einem einfachen Klick auf das Batch-File gestartet werden. Man muss zumindest die in den Kapitel 2.1, 2.3, 2.4 und 2.5 angesprochenen Einstellungen/Anpassungen vornehmen, um den Chat Server starten zu können. Der Client muss entsprechend den Kapitel 3.1 und 3.3 angepasst werden.

1.4 Inhalt von »void-chat.zip«

README.txt Dieses Readme File  
Server.ini Konfigurationsfile für den Server X1)
Client.ini Konfigurationsfile für den Client X
chat-classes13.zip Enthält die class-Files für den Client und den Server  
StartServer.bat Batch-File zum Starten des Servers X
StartClient.bat Batch-File zum Starten des Clients X
\dat\IRC.template Template File für die IRC ähnlichen Commands  
\dat\MSG.template Template File für die MSG Commands  
\dat\Error_en.properties Enthält die Fehlermeldungen des Servers  
\channel\ Default Verzeichnis in das die Channels ihre Daten ablegen  
\log\ Default Verzeichnis in das die Log-Files abgelegt werden  
\config\Server_ex.ini Beispiel-Konfigurationsfile für den Server  
\config\Client_ex.ini Beispiel-Konfigurationsfile für den Client  
\config\Server.in_ Sicherheitskopie des Server-Konfigurationsfiles  
\config\Client.in_ Sicherheitskopie des Client-Konfigurationsfiles  

1) die mit X gekennzeichnteten Einträge müssen angepasst werden


2.0 SERVER

2.1. Server-Konfigurationsfile anpassen

Zunächst sind die Eintragungen in der »Server.ini« zu überprüfen1). Damit der Server gestartet werden kann, müssen die Einträge:

ausgefüllt sein.

Bei

sollte die IP Adresse des Rechners, auf dem der Server läuft, eingetragen werden. Bei Rechnern mit mehreren IP-Addressen muss die IP-Addresse, auf die der Server agieren soll, eingetragen werden.

Die übrigen Eintragungen müssen nicht angepasst werden.

1) mit der Version 1.0.2 sind in dem Konfigurationsfile default-Eintragungen vorhanden, damit für einen »schnellen« Start diese Eintragungen/Anpassungen nicht vorgenommen werden müssen. Nichtsdestotrotz sollten die Daten für einen »eigenen« Server angepasst werden.


2.2. Einträge im Konfigurationsfile »Server.ini«

[CONNECTION]    
server.protocol Definiert das Netzwerkprotokoll. Ist kein Wert eingetragen, wird TCP genutzt.
Möliche Eintragungen sind RMI oder TCP. Das Protocoll RMI kann fü das Internet nicht genutzt werden
 
server.host Definiert die IP-Adresse, auf die der Chat-Server aufsetzen soll. Soll der Chat-Server im Internet erreichbar sein, ist die IP-Adresse, die der Internet-Provider dem RechnerClient zugeteilt hat, einzutragen X1)
server.port Definiert den Port, auf dem die Kommunikation erfolgen soll. Standardeintragung ist 1285  
server.bind Definiert den »Bind«-Namen. Unter diesem Namen wird das zugehörige Java-Objekt im Rechner (RMIRegistry) registriert.
Clients suchen das Server-Objekt unter zuhilfenahme dieses Namens. Der Standardname sollte daher NICHT geändert werden
 
[SERVER]    
server.name Der Name des Servers. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein X
server.comment Ein Kommentar für den Server. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein X
server.pw Zum Setzen eines Passworts für den Server. Ist ein Passwort gesetzt, müssen die Clients beim CONNECT das Passwort angeben  
server.user.limit Setzt eine Obergrenze an gleichzeitig auf dem Server befindlichen Benutzern  
server.admin.name Der Name des Administrators. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein  
server.admin.pw Das Kennwort für den Administrator. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein  
server.admin.email Die e-Mail des Administrators. Zum erfolgreichen Starten des Servers muss eine Eintragung vorhanden sein  
errorfile Definiert den Standort des Errorfiles »error_en.properties«. Das File muss über die Dateistruktur erreichbar sein (darf also NICHT in einem Archivfile (zip,jar,arj...) abgelegt sein.
Die Eintragung wird als relative Pfadangabe zum aktuellen Arbeitsverzeichnis verstanden. Ist z.B der Server in
  D:\Programme\Chat
installiert und die Eintragung zu errorfile ist:
  errorfile=files\Error_en.properties
muss das File im Verzeichnis:
  D:\Programme\Chat\ files\Error_en.properties
abgelegt sein
 
[LOGGING]    
log.server.console Gibt an, ob der Server Ausgaben in die Konsole loggen soll (true) oder nicht (false)  
log.server.file Definiert das zu benutzende Logfile für den Server. Mögliche Werte sind:
  1. kein Wert angegeben: der Server erstellt KEIN Logfile
  2. Angabe eines vollqualifizierten Logfiles: der Server erstellt sein Logfile am angegebenen Ort
  3. Angabe eines relativen Logfiles: der Server erstellt sein Logfile im Pfad der sich aus »Arbeitsverzeichnis« + »angegebener Pfad/Name« zusammensetzt

Beispiele:
log.server.file=
log.server.file=D:\Programme\chat\myLogs\Server.log
log.server.file=\myLogs\Server.log

 
log.server.level Definiert den entsprechenden Loglevel (0-10) 2)  
log.channel.console Gibt an, ob die einzelen Channels Ausgaben in die Konsole loggen sollen (true) oder nicht (false)  
log.channel.path Definiert den Pfad, in den die einzelen Channels ihr Logfile ablegen sollen. Mögliche Werte sind:
  1. kein Wert angegeben: die Channels erstellen KEIN Logfile
  2. Angabe eines vollqualifizierten Pfads: die Channels erstellen ihre Logfiles im angegebenen Pfad
  3. Angabe eines relativen Pfads: die Channels erstellen ihre Logfiles im Pfad der sich aus »Arbeitsverzeichnis« + »angegebener Pfad/Name« ergibt

Beispiele:
log.channel.path=
log.channel.path=D:\Programme\chat\myLogs\
log.channel.path=\myLogs\

 
log.channel.level Definiert den entsprechenden Loglevel (0-10) 2)  
[VERWALTER]    
user.verwalter.wait Definiert das Zeitinterval in Millisekunden, nach der die Benutzerverwaltung nach »verlorenen« 3) Benutzern sucht. »Verlorene« Benutzer werden aus der Benutzerverwaltung entfernt.
Je geringer der eingestellte Wert ist, desto häufiger sucht die Verwaltung nach »verlorenen« Benutzer, was aber auch zur Folge hat, dass der Server mehr belastet ist. Längere Wartezeiten entlasten den Server, können aber dazu führen das nicht mehr vorhandene Benutzer bis zum nächsten Suchlauf noch verwaltet werden.
 
channel.verwalter.wait Definiert das Zeitinterval in Millisekunden, nach der die Channelerverwaltung nach »verwaisten« 4) Channels sucht. »Verwaiste« Channels werden aus der Channelverwaltung entfernt.
Je geringer der eingestellte Wert ist, desto häufiger sucht der Verwalter nach »verwaisten« Channels, was aber auch zur Folge hat, dass der Server mehr belastet ist. Längere Wartezeiten entlasten den Server, können aber dazu führen das »verwaisten« Channels bis zum nächsten Suchlauf noch verwaltet werden.
 
[CHANNEL]    
channel.savepath Definiert den Pfad, in der die einzelnen Channels ihre Informationsdatei (*.ch) schreiben. Mögliche Werte sind:
  1. kein Wert angegeben: die Channels erstellen ihre Informationsfile in »Arbeitsverzeichnis« + »/channels/*.ch«
  2. Angabe eines vollqualifizierten Pfads: die Channels erstellen ihr Informationsfile im angegebenen Pfad
  3. Angabe eines relativen Pfads: die Channels erstellen ihr Informationsfile im Pfad der sich aus raquo;Arbeitsverzeichnis« + »angegebener Pfad« zusammensetzt

Beispiele:
channel.savepath=
channel.savepath=D:\Programme\chat\myChannels\
channel.savepath=\myChannels\

 
channel.wait Definiert das Zeitinterval in Millisekunden, nach der der einzelne Channel nach »verlorenen« 3) Benutzern sucht. »Verlorenen« Benutzer werden aus dem Channel entfernt (aber nicht automatisch aus der Benutzerverwaltung)  
reserved[0...n] Definiert einen reservierten Channelnamen. Es können beliebig viele Einträge in der INI enthalten sein. Je Eintrag darf immer nur ein Channelname angegeben werden. Für eine eindeutige Identifizierung sollte dem Channelname der Präfix # vorangestellt werden.

Beispiel:
reserved[0]=#notallowed
reserved[1]=#forbidden

 

1) die mit X gekennzeichnteten Einträge müssen angepasst werden
2) über den Loglevel können Systemausgaben gesteuert werden. Der Loglevel 10 bewirkt, dass die Anwendung keine Ausgaben erzeugt. Bei Loglevel 0 werden alle relevanten Daten ausgegeben. Für die Fehlersuche sollte daher der Level 0 eingestellt werden
3) »Verlorene« Benutzer sind Benutzer, die sich nicht ordnungsgemäß am Server abgemeldet haben. Dies kann daran liegen, dass der Benutzer die Chat Client Anwendung nicht ordentlich beendet hat, dass die Internet- (Nezwerk-) verbindung abgebrochen ist oder ein sonstiger Fehler aufgetreten ist.
4) »Verwaiste« Channels sind Channels, in denen sich kein Benutzer mehr befindet

2.3. Anpassen der Startdatei

Im zip-File »void-chat.zip« ist das Batch-File »StartServer.bat« enthalten, daß an die Installation der Java Runtime Umgebung (Java Runtime Environment = JRE) angepasst werden muss:

set JDK=D:\Programme\Java\JDK1.3\jre

set classpath=%JDK%/lib/rt.jar;.;chat-classes13.zip;
%JDK%/bin/java de.y.chat.server.ServerMain

Hier muss die Zeile
set JDK=
an die Installation der JRE auf dem Rechner angepasst werden.

Beispiel:
Hat man die JRE unter D:\Programme installiert, so befindet sich dort folgende Ordner-Strukur:
  D:\Programme\JRE
oder
  D:\Programme\JDK\JRE (wenn man das Java Development Kit installiert hat).

Die Eintragung in der raquo;StartServer.bat« muss dann folgendermaßen angepasst werden:

set JDK=D:\Programme\JRE (oder set JDK=D:\Programme\JDK\JRE)

2.4. Parameter der Startdatei

Innerhalb des Batch-File »StartServer.bat« kann dem zu startenden Java-Programm ein spezielles Konfigurationsfile übergeben werden:

/ini=Name des Ini-Files (zur Übergabe eines speziellen »Server.ini« Files)

Beispiel:


%JDK%/bin/java de.y.chat.server.ServerMain /ini=myServer.ini

2.5. Anpassen des Java Runtime Environment (JRE)

Damit der Server erfolgreich gestartet werden kann, muss der JRE noch bekanntgegeben werden, dass die Anwendung die entsprechenden Rechte erhält.Dazu öffnet man das File »java.policy«, welches sich im JRE Ordner unter JRE\lib\security\ befindet. Hier muss man unter den Zeilen:

// Standard extensions get all permissions by default
grant codeBase "file:${java.home}/lib/ext/*" {
  permission java.security.AllPermission;
};


die folgenden Zeile(n) hinzufügen:

grant codeBase "file://chat-classes13.zip" {
  permission java.security.AllPermission;
};

Anschliessend sucht man die Zeile

permission java.net.SocketPermission "localhost:1024-", "listen";


und ändert diese in

permission java.net.SocketPermission "localhost:1024-", "listen,accept,connect,resolve";

2.6. Einrichten bei mehreren IP-Adressen

Soll der Chat-Server auf einem Rechner laufen, für den mehrere IP Adressen "konfiguriert" sind (z.B. für eine lokale Netzwerkkarte und durch einen Internet-Provider) muss der JDK Parameter:

-Djava.rmi.server.hostname=

verwendet werden. Der Parameter muss in der »StartServer.bat« angegeben werden.

Beispiel:
Für seine Netzwerkkarte hat man sich eine private IP-Adresse reserviert, z.B. 192.168.0.99. Durch den Internet Provider hat man beim "Einwählen" dieIP-Adresse 80.131.4.117 erhalten. Der Chat-Server soll anderen Benutzern im Internet zur Verfügung gestellt werden. Es muss der Parameter

-Djava.rmi.server.hostname=80.131.4.117

in dem Batch-File »StartServer.bat« zus„tzlich angegeben werden. Das Batch-File sieht dann so aus:

set JDK=D:\Programme\Java\JDK1.3\jre
set classpath=%JDK%/lib/rt.jar;.;chat-classes13.zip;
%JDK%/bin/java -Djava.rmi.server.hostname=80.131.4.117 de.y.chat.server.ServerMain

2.7. Tipp Server Starten

Nachdem man die oben genannten Eintragungen im der »Server.ini« vorgenommen hat, die Anpassungen im java-Policy File durchgeführt und die »StartServer.bat« an das eigene JRE angepasst hat, kann man den Server starten.
Möchte man aber testen, ob der Server ordnungsgemäß gestartet ist sollte daher die »Server.ini« nochmals vorübergehend geändert werden. Die Zeilen
log.server.console=
log.server.file=
log.server.level=

sollten folgende Eintragungen erhalten:
log.server.console=true
log.server.file=/log/server.log
log.server.level=0

Dies führt dazu, dass der Server alle Ausgaben in die Konsole und in das Server Logfile schreibt.

Startet der Server ordnungsgemäß erscheint eine Ausgabe in der Konsole, die in etwa so aussieht:
Tatsächliches Logfile ist=D:/void-chat/log/server.log
Binding the server...
Done.
Server installed.

Location Data:
  ** Protocol: TCP
  ** Host: 127.0.0.1
  ** Port: 1285

Konnte der Server nicht gestartet werden kommt entweder

oder

3. CLIENT

3.1. Client-Konfigurationsfile anpassen

Folgende Einträge in der »Client.ini« müssen1) ausgefüllt sein:

Die übrigen Eintragungen müssen nicht angepasst werden.

1) mit der Version 1.0.2 sind in dem Konfigurationsfile default-Eintragungen vorhanden, damit für einen »schnellen« Start diese Eintragungen/Anpassungen nicht vorgenommen werden müssen. Nichtsdestotrotz sollten die Daten für einen »eigenen« Client angepasst werden.


3.2. Einträge im Konfigurationsfile »Client.ini«

[CLIENT]    
name der Nickname des Benutzers X1)
eMail die e-Mailadresse des Benutzers X
realname der wirkliche Name des Benutzers  
firststartup true, wenn der Client zum ersten Mal gestartet wird, ansonsten false  
join.channel[0...n] Der Name eines Channels, der automatisch betreten werden soll. Es können beliebig viele Einträge in der INI enthalten sein. Je Eintrag darf immer nur ein Channelname angegeben werden. Für eine eindeutige Identifizierung sollte dem Channelname der Präfix # vorangestellt werden.

Beispiel:
join.channel[0]=#final
join.channel[1]=#help
join.channel[2]=#ut2003

 
[SERVER]    
server.protocol Definiert das Netzwerkprotokoll. Ist kein Wert eingetragen, wird TCP genutzt.
Mögliche Eintragungen sind RMI oder TCP. Das Protocoll RMI kann fü das Internet nicht genutzt werden
 
server.host Definiert die IP-Adresse des Chat-Servers X
server.port Definiert den Port, auf dem die Kommunikation mit dem Server erfolgen soll.
Standardeintragung ist 1285
 
server.bind Definiert den »Bind«-Namen. Unter diesem Namen wurde der Chat-Server auf dem Host-Rechner in der RMIRegistry registriert.
Nach der Herstellung der Verbindung zwischen Client und Host, sucht der Client in der RMIRegistry des Hostrechners nach dem Chat-Server unter Berücksichtigung der »server.bind« Eintragung.
Dieser Standardname sollte daher nicht geändert werden
 
[LOGGING]    
log.client.console true, wenn Ausgaben in die Konsole geloggt werden sollen, ansonsten false  
log.client.file der Name des Files, in die die Ausgaben des Clients geloggt werden sollen. Mögliche Werte sind:
  1. kein Wert angegeben: der Client erstellt kein Logfile
  2. Angabe eines vollqualifizierten Logfiles: der Client erstellt sein Logfile am angegebenen Ort
  3. Angabe eines relativen Logfiles: der Client erstellt sein Logfile im Pfad der sich aus »Arbeitsverzeichnis« + »angegebener Pfad/Name« zusammensetzt

Beispiele:
log.client.file=
log.client.file=D:\Programme\chat\myLogs\Server.log
log.client.file=\myLogs\Server.log

 
log.client.level definiert den Loglevel (0-10)2)  
[COMMANDS+HELP]    
typ Definiert den Command Typ. Die Eintragung ist in dieser Version ohne Bedeutung. Grundsätzlich sind im Client 2 unterschiedliche Befehlssätze implementiert: IRC und MSG.
Der IRC Befehlssatz enthält Befehle, die eng an die im IRC gebräuchlichen Befehle angelehnt sind. Der MSG Befehlssatz ist eine Eigenentwicklung.
  • Um die IRC ähnlichen Befehle zu nutzen sind folgende Einstellungen notwendig:
    template=de/y/chat/client/IRC.template
    parser.class=de.y.chat.ParserIRC
    help.class=de.y.chat.client.HelpIRC_de
  • Um die MSG Befehle zu nutzen sind folgende Einstellungen notwendig:
    template=de/y/chat/client/MSG.template
    parser.class=de.y.chat.ParserMSG
    help.class=de.y.chat.client.HelpMSG_de
 
template Definiert das Template File für die Commmands  
parser.class Definiert das zu benutzenden Befehlsparser class-file (de.y.chat.client.ParserIRC oder de.y.chat.client.HelpMSG_de)  
[USER_INTERFACE]    
font.name der Name des Zeichensatzes  
font.size die Größe des Zeichensatzes  

1) die mit X gekennzeichnteten Einträge müssen angepasst werden
2) über den Loglevel können Systemausgaben gesteuert werden. Der Loglevel 10 bewirkt, dass die Anwendung keine Ausgaben erzeugt. Bei Loglevel 0 werden alle relevanten Daten ausgegeben. Für die Fehlersuche sollte daher der Level 0 eingestellt werden

3.3. Anpassen der Startdatei

Im zip-File »void-chat.zip« ist das Batch-File »StartClient.bat« enthalten, daß an die Installation der Java Runtime Umgebung (Java Runtime Environment = JRE) angepasst werden muss:

set JDK=D:\Programme\Java\JDK1.3\jre

set classpath=%JDK%/lib/rt.jar;.;chat-classes13.zip;
%JDK%/bin/java de.y.chat.server.ServerMain

Hier muss die Zeile
set JDK=
an die Installation der JRE auf dem Rechner angepasst werden.

Beispiel:
Hat man die JRE unter D:\Programme installiert, so befindet sich dort folgende Ordner-Strukur:
  D:\Programme\JRE
oder
  D:\Programme\JDK\JRE (wenn man das Java Development Kit installiert hat).

Die Eintragung in der »StartClient.bat« muss dann folgendermaßen angepasst werden:

set JDK=D:\Programme\JRE (oder set JDK=D:\Programme\JDK\JRE)

3.4. Parameter der Startdatei

Innerhalb des Batch-File »StartClient.bat« kann dem zu startenden Java-Programm ein spezielles Konfigurationsfile übergeben werden:

/ini=Name des Ini-Files (zur Übergabe eines speziellen »Client.ini« Files)

Beispiel:


%JDK%/bin/java de.y.chat.client.ClientMain /ini=myClient.ini


4. END

4.1. Programm - Version

Chat was programmed by: Thomas (VoiD) Keitel in 2002 (c)
Version: 1.0.1
E-Mail: VoiD
Fehler und Fehlermeldungen, Bugs und sonstige Anregungen bitte an Found a Bug
senden.

4.2. Freigabe und Quellcode

Der Chat ist für den privaten Bereich hiermit ausdrücklich freigegeben. Für eine kommerzielle/betriebliche Nutzung ist das Einverständnis einzuholen. Eine entsprechende Anfrage ist an VoiD zu richten.
Interessierte Entwickler k”nnen den Quellcode gerne bei mir anfordern.

4.3. Thanx

Special thanks to:

4.4. Hilfe

Gerne bin ich bereit bei dem einen oder anderen Problem auszuhelfen. Dies gilt aber nur dann, wenn es sich um ein Problem handelt, dass nicht unter Zuhilfenahme dieses README-Files gelöst werden kann. Bei Problemen, die aufgrund unzureichender Kenntnisnahme dieses Dokuments auftreten werde ich nicht weiterhelfen.

Have fun :)

5. VERSION HISTORY

5.1. Version 1.0.1

5.2. Version 1.0.2