Wie überprüfen wann der User online oder offline ist?

RezaScript

Bekanntes Mitglied
Hallo,

ich benutze Websocket und möchte erfahren, wann der User online und wann er offline ist.

Java:
@OnClose
public void handleClose(Session userSession) throws IOException {
    users.remove(userSession);
    // Post the message
    for (Session user : users) {
        Helper helper = new Helper();
        String currentTime = helper.getTheDate("HH:mm:ss");
        user.getBasicRemote().sendText(String.format("[%s] %s %s<br>", currentTime, userSession.getUserProperties().get("username"), "has just quit."));
    }
}

Der Code oben gibt jedem User die Information, dass der User nun offline ist. So weit ist alles gut.

Ich habe eine User-Liste mit folgendem Code:
HTML:
<img class="profile-pic" src="../assets/img/jessica.png" alt="Jessica"> <i class="status offline"></i>Jessica
<img class="profile-pic" src="../assets/img/reza.png" alt="Reza"> <i class="status offline"></i>Reza
<img class="profile-pic" src="../assets/img/kevin.png" alt="Kevin"> <i class="status offline"></i>Kevin
...

Ihr seht die CSS-Klassen "status" und "offline". "offline" ist momentan nur statisch, sollte aber dynamisch sein.

Ich möchte also, dass die Methode handleClose() nicht nur die Information an User mitteilt, sondern, dass ich die Information auch in JavaScript bekomme, damit ich die CSS-Klasse dann entsprechend eingeben kann. Zwar liefert der Server einen String (und zwar eben das was der User sieht), hier ein Beispiel:
[01:34:33] reza has just quit.
Aber ich denke es müsste irgendwie eine bessere Lösung geben.

Javascript:
const log = console.log.bind(console);

/* CHAT */
const webSocket = new WebSocket('ws://localhost:8080/test_war_exploded/chat');
const chatResult = document.querySelector('.result');
const loginArea = document.querySelector('.login-area');

// Open
webSocket.onopen = (msg) => {
    log("Server is now connected\n");
    log(msg);
};

// Message
webSocket.onmessage = (msg) => {
    chatResult.innerHTML += msg.data;
};

// Close
webSocket.onclose = (msg) => {
    webSocket.send('has just quit.');
    log(msg.data); // <-- liefert nichts zurück
};

// Error
webSocket.onerror = () => {
  log("There is an error. Try it again later.");
};

Falls ihr eine Idee hättet, würde ich mich sehr freuen!

Falls euch der ganze Code interessiert: https://bitbucket.org/rezasript/zt-productions/
 
Zuletzt bearbeitet:

mihe7

Top Contributor
an User mitteilt, sondern, dass ich die Information auch in JavaScript bekomme, damit ich die CSS-Klasse dann entsprechend eingeben kann.
Du bekommst die Info doch in JavaScript (onmessage). Wenn ich Dein Problem richtig verstehe, dann schickst Du die Info nur in einer Form raus, die sich auf Client-Seite nicht einfach verarbeiten lässt. Nicht zuletzt weil der Client meist in JavaScript geschrieben ist, verwendet man dazu in der Regel JSON.

Unabhängig vom Format musst Du Dir überlegen, wie die Nachrichten aufgebaut sein sollen, die Du zwischen Client und Server austauschst, denn es werden ja verschiedene Arten von Nachrichten verschickt: Textnachrichten, Ereignisse, ggf. Befehle. Du könntest beispielsweise ein Nachrichtenobjekt wie folgt strukturieren:
JSON:
{
    "type": <Art der Nachricht>
    "content": <Inhalt der Nachricht>
}
Dann könntest Du z. B. festlegen, dass im Fall einer Textnachricht gilt: "type" == "text" und der content dann wie folgt aufgebaut ist:
JSON:
{
    "timestamp": <Zeitstempel>
    "sender": <Benutzername des Absenders>
    "text": <Text der Nachricht>
}
Für ein Ereignis könnte "type" == "event" gelten und der content
JSON:
{
    "timestamp": <Zeitstempel>
    "sender": <Benutzername des Absenders>
    "eventType": <Art des Ereignisses>
    "eventData": <Zusätzliche Daten zum Ereignis>
}
sein. Wenn z. B. Zeitstempel und Sender in jeder Nachricht relevant sind, könnte man das natürlich hochziehen.

Dann könnte eine Quit-Nachricht so aussehen:
JSON:
{"type":"event","content":{"timestamp":"2019-06-05T07:27:30Z","sender":"mihe7","eventType":"quit"}}

In onmessage auf Client-Seite verarbeitest Du dann die Nachricht:
Javascript:
webSocket.onmessage = (event) => {
    let msg = JSON.parse(event.data);
    // msg.type liefert den Typ der Nachricht
    // gilt msg.type === 'text', dann gibt msg.content.text den Text an
    // usw.
};
 

mihe7

Top Contributor
Das mit JSON war eine super Idee!
Ja, leider nicht von mir und auch nicht ganz neu :)

Serverseitig gibt's hierfür übrigens JSON-P und JSON-B. Infos zur Verwendung z. B. unter https://www.baeldung.com/jee7-json bzw. https://www.baeldung.com/java-json-binding-api (ob Du die Maven-Dependencies brauchst, hängt davon ab, welchen Server Du verwendest. Ein vollständiger Java EE 8 Server bringt den Spaß von Haus aus mit und in der pom.xml reicht der Verweis auf die Java EE APIs, scope provided; ein Java EE 7 Server hat "nur" JSON-P dabei).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
A Gleichheit überprüfen Java Basics - Anfänger-Themen 8
N ResultSet auf Einträge überprüfen Java Basics - Anfänger-Themen 5
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
T Diagonale von 2DArray auf gleichheit überprüfen Java Basics - Anfänger-Themen 2
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
Y Wie kann man überprüfen, ob bei einem Print Befehl tatsächlich etwas geprintet wurde? Java Basics - Anfänger-Themen 4
P Möglichen Pfad überprüfen Java Basics - Anfänger-Themen 5
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
C String auf Dualzahl überprüfen Java Basics - Anfänger-Themen 5
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
P Parameter auf Datenformat überprüfen Java Basics - Anfänger-Themen 5
F Hilfe - Wahrheitswert überprüfen ohne If Java Basics - Anfänger-Themen 2
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
H Harshad-Zahl (Nivenzahl) und Palindrom überprüfen Java Basics - Anfänger-Themen 2
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
S CSV auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 8
D Klassen Primzahlen überprüfen Java Basics - Anfänger-Themen 3
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
Orkanson Methoden String in Wörter zerlegen und Endungen der Wörter überprüfen. Java Basics - Anfänger-Themen 4
F n-1 als Vielfaches von 20 überprüfen Java Basics - Anfänger-Themen 3
S Täglich auf Erinnerungen überprüfen Java Basics - Anfänger-Themen 5
S Eingabe auf Richtigkeit und Reihenfolg überprüfen Java Basics - Anfänger-Themen 3
L Eingabe überprüfen Java Basics - Anfänger-Themen 7
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30
S Passwortchecker Sequenzen überprüfen Java Basics - Anfänger-Themen 4
L String überprüfen mit .equals .contains oder .matches? Java Basics - Anfänger-Themen 1
J Passwort überprüfen Java Basics - Anfänger-Themen 3
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
C Stringbuffer auf Zeilenumbruch überprüfen Java Basics - Anfänger-Themen 14
T Auf Palindrom überprüfen Java Basics - Anfänger-Themen 10
H überprüfen ob in Array gleiche int-Zahlen gespeichert werden. Java Basics - Anfänger-Themen 7
m0n4ch Variablen String auf ungültige Zeichen überprüfen Java Basics - Anfänger-Themen 13
Jinnai4 Mehrere Textfelder überprüfen Java Basics - Anfänger-Themen 16
C Bei der LinkedList auf Palindrom überprüfen Java Basics - Anfänger-Themen 4
W Methode um Nummer zu überprüfen. Java Basics - Anfänger-Themen 5
M Felder leer - überprüfen? Java Basics - Anfänger-Themen 2
H Eingegebenen String mit If überprüfen Java Basics - Anfänger-Themen 8
W String Array in Int umwandeln um auf Zahl zu überprüfen Java Basics - Anfänger-Themen 4
Z Benutzereingabe überprüfen. Java Basics - Anfänger-Themen 2
T Matrix auf Symmetrie überprüfen Java Basics - Anfänger-Themen 6
S Variablen Array in ArrayList auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 4
B Schaltjahr überprüfen (Code) Java Basics - Anfänger-Themen 4
B Datentypen Textfeld auf Nicht-Zahlen überprüfen Java Basics - Anfänger-Themen 10
J Etwas dauerhaft überprüfen, wie ? Java Basics - Anfänger-Themen 8
T CSV auf Inhalt und Zeilen überprüfen Java Basics - Anfänger-Themen 2
I Matrix überprüfen Java Basics - Anfänger-Themen 8
B Variablen Objektvariablen ständig überprüfen Java Basics - Anfänger-Themen 3
A String auf Format überprüfen Java Basics - Anfänger-Themen 7
D Javaliste auf gleiche Einträge überprüfen Java Basics - Anfänger-Themen 2
M String überprüfen ob nur Buchstaben enthalten sind? Java Basics - Anfänger-Themen 10
Todesbote String auf Muster überprüfen Java Basics - Anfänger-Themen 19
A Input/Output Input überprüfen und weiterverarbeiten Java Basics - Anfänger-Themen 10
U JSP Password überprüfen ob es Zahlen enthält Java Basics - Anfänger-Themen 3
K Eingabe überprüfen Java Basics - Anfänger-Themen 4
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
M String auf Inhalt überprüfen Java Basics - Anfänger-Themen 11
H Mehrdimensionales Array - Inhalt auf Null überprüfen Java Basics - Anfänger-Themen 5
S Java Scanner auf Zahlen/Numerische Zeichen überprüfen Java Basics - Anfänger-Themen 15
D Eine Stelle eines Char- Arrays nach dem vorkommen in einem ganzem anderem Array überprüfen Java Basics - Anfänger-Themen 20
M Erster JAR Start überprüfen Java Basics - Anfänger-Themen 6
F TextFeld überprüfen Java Basics - Anfänger-Themen 20
S Eingabe auf int bzw. String überprüfen Java Basics - Anfänger-Themen 6
T Attribute eines anderen Objektes überprüfen und danach handeln Java Basics - Anfänger-Themen 7
A Integer Eingabe überprüfen Java Basics - Anfänger-Themen 7
A Tic Tac Toe - Brett auf Sieger überprüfen Java Basics - Anfänger-Themen 3
S Char auf Zahl überprüfen Java Basics - Anfänger-Themen 8
T Kommandozeilen Parameter überprüfen Java Basics - Anfänger-Themen 3
D Internetseite überprüfen Java Basics - Anfänger-Themen 9
G Elemente von Feld und Liste auf Gleichheit überprüfen Java Basics - Anfänger-Themen 13
G überprüfen ob char = 'N' 'S' 'O' oder 'W' Java Basics - Anfänger-Themen 42
H Methoden Array auf Vorkommen eines Integers überprüfen Java Basics - Anfänger-Themen 2
M Argument der Kommandozeile überprüfen Java Basics - Anfänger-Themen 4
S Klassen Aufgabe: Binärbaum überprüfen Java Basics - Anfänger-Themen 16
Os-Programming Checkbox immer wieder überprüfen Java Basics - Anfänger-Themen 13
H überprüfen, ob Objekt verändert wurde Java Basics - Anfänger-Themen 11
GianaSisters Auf Datentyp überprüfen Java Basics - Anfänger-Themen 13
W Hilfe: Eingabe überprüfen Java Basics - Anfänger-Themen 8
W String überprüfen Java Basics - Anfänger-Themen 6
R Collections Text-Dateien auf Gleichheit überprüfen Java Basics - Anfänger-Themen 22
P Attribute von Objekten in Vectoren überprüfen Java Basics - Anfänger-Themen 4
D Inhalt einer Liste auf nur ein Wert überprüfen ohne die Liste komplett zu interieren Java Basics - Anfänger-Themen 6
H Alle Array-Elemente auf einmal überprüfen? Java Basics - Anfänger-Themen 10
C String überprüfen, ob gültig, sonst wiederholung der eingabe Java Basics - Anfänger-Themen 9
S Wie überprüfen das in Textfield nur Hexadezimal ist? Java Basics - Anfänger-Themen 4
B chars auf Zahlen überprüfen Java Basics - Anfänger-Themen 4
N FileOutputStream und existenz von Datei überprüfen Java Basics - Anfänger-Themen 2
M Stringinhalt überprüfen Java Basics - Anfänger-Themen 4
A Elemente 2er int[] auf Gleichheit und Position überprüfen Java Basics - Anfänger-Themen 7
B args[0] auf Anzahl Zeichen überprüfen Java Basics - Anfänger-Themen 29
B Datentypen Character überprüfen Java Basics - Anfänger-Themen 3
B zwei zufällige elemente aus array lesen und überprüfen Java Basics - Anfänger-Themen 8
D Eingabe überprüfen mit in.done() Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben