Erstellen eines ChatServers

slejden

Mitglied
Hallo,

ich soll / will ein simples Chatprogramm erstellen. Die Vorgabe bestimmt 4 Dateien. ICHatServer, ChatRoom, MyChat. Realisiert werden können soll das man sich Eingeloggt, Ausgeloggt und man was schreiben kann.

Mein Problem ist ich habe kein Ansatz wie man dort voran geht. Habe mir das Buch geholt "Aufbaukurs Java", doch leider soll der Chat so nicht sein.
Nun weiß ich nicht weiter und hoffe jemand von euch kann mir helfen.
 

Anhänge

  • ChatRoom.txt
    594 Bytes · Aufrufe: 13
  • IChatServer.txt
    2 KB · Aufrufe: 5
  • MyChat.txt
    2,4 KB · Aufrufe: 10
  • TestChat.txt
    688 Bytes · Aufrufe: 5

Joose

Top Contributor
Wo genau liegt das Problem? (eine konkrete Beschreibung mit Frage wenn möglich). Warum diese Vorgabe? Woher kommen diese Vorgaben?
 

slejden

Mitglied
ehm, soll ich Studium ein Chatprogramm, mit den Vorgaben meines Profs., erstellen. Möglichkeiten wurden stark eingeengt, weswegen wohl der Chat fast fertig ist. Habe trotzdem Probleme der Sache zu Folgen. Nun hatte ich mir aus diesem Grund mehrere Bücher besorgt und auch kräftig gegooglt. Auffällig ist die immer wiederkehrende Syntax, die ich leider nicht nutzen kann. Um besser zu verstehen was mir fehlt habe ich das unfertige Programm hochgeladen. Der IChatServer brauch wohl noch ausformulierte Funktionen.
Soweit so gut...
 

Joose

Top Contributor
Gut du hast eine Vorlage vom Prof, diese hast du schon gezeigt (Hinweis: Code bitte in Code-Tags posten -> [code=java]/* dein java code */[/code]).
Deine genaue Aufgabe hast du nur angerissen, am besten gibst du diese Wort für Wort wieder (hier kann man auch ein Bild davon machen).

Und dann noch eine konkrete Frage wo dein Problem ist ;)

IChatServer darf keine ausformulierten Methoden enthalten, da es sich hierbei um ein Interface handelt (Grundlagen OOP).
 

slejden

Mitglied
Java:
public interface IChatServer
{
    /**
    * Informiert den Chatserver dass der user seinen aktuellen Raum verlassen will
    * Der User muss natuerlich eingeloggt sein
    * @param user der den Raum verlaesst
    * @return liefert die liste aller uebrigen user des raums.
    * liefert null wenn der user nicht in einem raum war
    */
    private raumBetreten;
    private raumVerlassen;
    public server;
    public User;
     
    public List<User> leaveRoomRequest(User user);

    /**
    * ein eingeloggter user betritt einen neuen raum. wenn er bereits in einem raum ist wird er dort abgemeldet
    * @param user name der den raum betritt
    getUsersForRoomRequest
    * @param roomName name des neuen raums
    roomName
    * @return liefert eine userliste aller user die jetzt im raum sind
    return users.add(all)
    */
    public List<User> enterRoomRequest(User user, String roomName);

    /**
    * fragt den server nach einer namesliste aller chatraeume
    * @return liste aller raumnamen
    */
    public List<String> getChatRoomsRequest();

    /**
    * liefert die namen aller user die im gleichen raum wie der user sind
    * der user muss angemeldet sein und in einem raum, sonst gibt es ein null ergebnis
    * @param user the user
    * @return liste aller usernamen oder null
    */
    public List<User> getUsersForRoomRequest(User user);

    /**
    * meldet den user am chatserver an. der user ist dann noch in keinem raum
    * @param user name der sich anmeldet
    * @return liste aller chatroom-namen
    * @throws Exception wenn bereits ein user mit gleichem namen angemeldet ist
    */
    public List<String> userLogin(String username, String password)
            throws Exception;

    /**
    * user wird aus dem server abgemeldet. wenn er der letzte user im server war, wird dieser beendet.
    * der user muss eingeloggt sein, sonst passiert nichts
    * @param name des user der sich abmeldet.
    */
    public void userLogout(User user);
}

Zu dieser Datei sind noch 3 weitere gegeben. Doch müssen in dieser die Kommentare ausformuliert werden. So z.B. unter "interface IChatServer", es soll angezeigt werden das jemand den Raum betritt oder verlässt.
Kann mir denken das dazu in der Datei "Room.java" geguckt werden muss, wie die Aussage betreten bzw leave definiert ist. Daher hab ich die 4 defintionen einfach mal reingepackt:
private raumBetreten;
private raumVerlassen;
public server;
public User;
habe diesen Stil des öfteren gesehen. Nur der Grund ist mir nicht geläufig. Ja wie gehe ich nun weiter vor?
Abarbeiten der Kommentare. So z.B. User muss eingeloggt sein! Könnte sich auf ein this, oder add- Fkt beziehen?!
Pff ja weiß gar nicht wo/wie ich anfangen soll.
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Doch müssen in dieser die Kommentare ausformuliert werden. So z.B. unter "interface IChatServer", .......
Kann mir denken das dazu in der Datei "Room.java" geguckt werden muss,

Oben gibt es keine "Room.java" sondern nur txt Dateien ....
Außerdem steht ein Kommentar zu einer Methode immer über der Methode nicht darunter ;)

es soll angezeigt werden das jemand den Raum betritt oder verlässt. Kann mir denken das dazu in der Datei "Room.java" geguckt werden muss, wie die Aussage betreten bzw leave definiert ist. Daher hab ich die 4 defintionen einfach mal reingepackt:
private raumBetreten;
private raumVerlassen;
public server;
public User;

Was soll das genau sein? Da fehlt bei jedem dieser 4 "Dinger" eine Typangabe.
Außerdem kann ein Interface nur Methodensignaturen und Konstanten enthalten und keine Attribute oder dergleichen.
Diese Dinge gehören dann in die Klasse, welche das Interface implementiert.

habe diesen Stil des öfteren gesehen. Nur der Grund ist mir nicht geläufig.

Welchen Stil?

Ja wie gehe ich nun weiter vor?
Abarbeiten der Kommentare. So z.B. User muss eingeloggt sein! Könnte sich auf ein this, oder add- Fkt beziehen?!
Pff ja weiß gar nicht wo/wie ich anfangen soll.

Die im 1.Post hinzugefügte Datei "MyChat.txt" enthält doch schon eine Java Klasse, welche das Interface "IChatServer" implementiert und die Methoden zu einen großen Teil schon geschrieben hat.
Dort müsstest du nur ansetzen und eben noch das ergänzen was noch fehlt.
Gehe von Methode zu Methode vor ... überlege dir was laut Kommentar verlangt ist das die Methode können soll und versuche es umzusetzen.

Solltest du dann eine konkrete Frage haben bzw. wo hängen kannst du hier auch eine konkrete Frage stellen :)
 

slejden

Mitglied
wenn ich das jetzt richtig verstehe, ist soweit alles fertig um in MyChat alles auszuführen?
Gehe davon aus das in IChatServer noch ein paar Sachen eingetragen werden müssen?!
 

Joose

Top Contributor
wenn ich das jetzt richtig verstehe, ist soweit alles fertig um in MyChat alles auszuführen?

Das habe ich nie behauptet. Ich habe nur gesagt das in der Klasse "MyChat" das Interface implementiert wird und schon große Teile der Kommentare abgedeckt werden.
Deine Aufgabe wäre es eben nun zu kontrollieren ob deiner Meinung nach die Methoden in "MyChat" alle so implementiert sind wie es das Kommentar im Interface verlangt!

Außerdem wirst du dir schwer tun "MyChat" auszuführen :p
Deine main Methode ist in TestChat.java. Dort musst du dann eben eine Instanz von MyChat erstellen.

Gehe davon aus das in IChatServer noch ein paar Sachen eingetragen werden müssen?!

Was willst du in "IChatServer" eintragen?
Wie oben schon gesagt das ist ein Interface und im Interface stehen nur Methodensignaturen (deren Kommentare) und Konstenten (sofern vorhanden).
 

slejden

Mitglied
Frage zu private String user/secret

Java:
public class User                                            // Klasse mit Namen "User"
{
   
    private String user;
    private String secret;
   

    public User(String name, String passwort)                // Konstruktor 
    {
        this.user = name;
        this.secret = passwort;
    }
   
    public String getName()                                    // Buchstabenkette aus "Name" nehmen
    {
        return this.user;                                    // diesen Namen zurück geben
    }
   
    public boolean passwortKorrekt(String passwort)            // hier wird das Passwort geprüft   Parameter ist Passwort
    {
        return this.secret.equals(passwort);
    }
}

In dieser Klasse mit dem Namen "User" sind
private String user;
private String secret;

definiert.
Meine Frage: warum werden diese beiden privates hier defniert, wofür stehen diese?
 

InfectedBytes

Top Contributor
Java:
       this.user= name;
       this.secret= passwort;
eben username und passwort.
Und jeder Benutzer muss eben einen Namen, sowie ein Passwort besitzen
 

Joose

Top Contributor
Das sind Attribute der Klasse User. Sie beschreiben die Daten/Eigenschaften eines User Objekts.
Im Attribut "user" wird der Username gespeichert und im Attribut "secret" dürfte das Passwort gespeichert werden.
 

slejden

Mitglied
Die Datei IChatServer wird definiert mit "public interface IChatServer"

Hier ein kurzer Ausschnitt:
Java:
public interface IChatServer
{

    /**
    * Informiert den Chatserver dass der user seinen aktuellen Raum verlassen will
    * Der User muss natuerlich eingeloggt sein 
    * @param user der den Raum verlaesst
    * @return liefert die liste aller uebrigen user des raums. 
    * liefert null wenn der user nicht in einem raum war 
    */

    public List<User> leaveRoomRequest(User user);
...
...
...
/

In dieser werden keine Funktionen definiert sondern Methodensignaturen und Konstanten deklariert.
Was sagt mir nun im Ganzen das Interface aus?
Stellt alle benötigten Klassen da?!
 

Joose

Top Contributor
Ein Interface stell gar keine ("benötigte") Klasse dar. Ein Interface ist ein Interface.

Implementiert eine Klasse ein Interface, so muss diese Klasse alle im Interface definierten Methoden implementieren!
 

slejden

Mitglied
Dann könnte man sagen ein Interface bestimmt und in der Klasse die ein Interface implementiert wird alles im Interface definierte übernommen, bzw. muss übernommen werden von der Klasse?
 

slejden

Mitglied
Wie kann ich festhalten das sich jemand ausloggt?

Meine Überlegung hat mit .remove zu tun, würde das passen?
z.B.: user.remove(name);
 

slejden

Mitglied
eine Gegenfrage, gibt es hier eine Abteilung mit Übungsaufgaben- dürfen durchaus simple sein?

Ja stimmt schon ist in MyChat.

Java:
for (int i = 0; i < allRooms.size(); i++)
        {
(3)            ChatRoom currentroom = allRooms.get(i);       // <<-------- zum Beispiel an dieser Stelle
            if (currentroom.getAllUsers().contains(user))
            {
                currentroom.delUser(user);
                return currentroom.getAllUsers();
            }
        }

In Zeile 3 kommt der Befehl currentRoom vor. Ist dies ein expliziter Java-befehl, oder setzt sich einer Deklaration zusammen?[/code]
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
currentRoom ist die Bezeichnung der lokalen Variable (vom Typ ChatRoom). Du könntest statt currentRoom dir auch eine andere Bezeichnung ausdenken wie "hugo", "fritz" oder "superduperrollercoaster1". Aber man sollte normalerweise eine Bezeichnung benennen die gleichzeitig erklärt welches Objekt man durch diese Variable anspricht. In diesem Fall den aktuellen Raum (currentRoom) da man in der Schleife anscheinend alle Räume der Liste (allRooms) durchgeht.

Bitte beschäftigte dich nochmals mit den Grundlagen, diese fehlen dir anscheinend!
 

Neue Themen


Oben