Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:netzwerk:websocket

WebSocket und WebSocketClient

Die Klasse WebSocket

Auf dieser Seite findest Du eine Beschreibung aller API-Methoden zur Netzwerkprogrammierung. Falls Du neu in das Thema einsteigst, ist diese Seite vielleicht nicht unbedingt geeignet, sondern eher das Video, in dem ich Schritt für Schritt erkläre, wie man ein einfaches Chat-Programm erstellt.

Die Klasse WebSocket bietet Methoden, um mit anderen Rechnern in Echtzeit Daten auszutauschen, auf denen ebenfalls die Online-IDE läuft. Dadurch lassen sich zum Beispiel Netzwerkspiele erstellen. Hier die Methoden im einzelnen:

  • void open(String sessionCode, String nickName):
    Startet die Verbindung mit dem Server. Den SessionCode kannst Du frei wählen. Mit allen anderen Clients Deiner Schule, die eine Verbindung mit demselben SessionCode aufbauen, kannst Du anschließend Daten austauschen. Auch der Nickname ist frei wählbar. Er ist für alle anderen Clients sichtbar.
  • void onOpen():
    Diese Methode wird vom System aufgerufen, wenn die Netzwerkverbindung erfolgreich geöffnet wurde. Durch Überschreiben dieser Methode kann auf dieses Ereignis reagiert werden.
    Wichtig: Erst nach Aufruf von onOpen() können Daten mittels send oder sendToAll an andere Clients gesendet werden.
  • void sendToAll(String message, String messageType):
    Sendet Daten (message) an alle anderen Clients. Den messageType kannst Du frei wählen. Die empfangenden Clients bekommen ihn zusammen mit den Daten übermittelt.
    Tipp: Du kannst auch Objekte senden, musst sie dazu aber vorher serialisieren, d.h. mithilfe der Methode toJson in eine Zeichenkette verwandeln. Mehr dazu weiter unten.
  • void close():
    Schließt die Netzwerkverbindung
  • void onClose():
    Wird aufgerufen, nachdem die Netzwerkverbindung erfolgreich geschlossen wurde.
  • void onMessage(WebSocketClient sender, String message, String messageType):
    Diese Methode wird vom System aufgerufen, wenn an den Client eine Nachricht geschickt wurde. Durch Überschreiben dieser Methode kann auf Nachrichten reagiert werden.
  • void findClients(int count):
    Sucht die übergebene Anzahl von „kontaktbereiten“ Clients, d.h. solchen Clients, die exakt dieselbe Suchanfrage abgegeben haben. Findet der Server die Clients, so ruft er bei allen beteiligten Clients onClientsFound auf.
  • void findClients(String[] nicknames):
    Sucht die Clients mit den angegebenen Nicknames. Haben sie eine entsprechende Suchanfrage (d.h. dieselben Nicknames) abgegeben, so so ruft der Server bei allen beteiligten Clients onClientsFound auf.
  • void findClient(String nickname):
    Sucht den Client mit dem angegebenen Nickname. Hat er eine entsprechende Suchanfrage (d.h. mit dem Nickname DIESES clients) abgegeben, so so ruft der Server bei beiden Clients onClientsFound auf.
  • onClientsFound(WebSocketClient[] clients, int ownIndex):
    Wird aufgerufen, wenn die durch die Methoden findClient bzw. findClients zuvor gesuchten Clients gefunden wurden.
  • onOtherClientConnected(WebSocketClient otherClient):
    Wird immer dann aufgerufen, wenn sich ein anderer Client unter Nutzung desselben sessionCodes mit dem Server verbunden hat.
  • void onOtherClientDisConnected(WebSocketClient otherClient):
    Wird immer dann aufgerufen, wenn ein anderer Client unter Nutzung desselben sessionCodes die Verbindung mit dem Server beendet hat.

Die Klasse WebSocketClient

Die Methoden onClientsFound, onOtherClientConnected und onMessage liefern jeweils als Parameter WebSocketClient-Objekte mit. Diese enthalten die Daten des/der jeweiligen Client/s, die sie mit entsprechenden Getter-Methoden auch herausgeben:

  • getFirstName (Vorname)
  • getLastName (Familienname)
  • getUsername (Benutzername)
  • getNickname (Nickname)

Gehört ein Client zu einer mit findClient bzw. findClients gefundenen Gruppe, so erhältst Du mit getIndex() auch noch den Index des Clients innerhalb dieser Gruppe. Die Zuordnung der Indices sieht jeder Client gleich, so dass man so einen bestimmten Client (z.B. den mit Index 0) für besondere Aufgaben heranziehen kann (z.B. um Server-Rollen zu übernehmen).

Daten an einen Client senden
Mit der Methode void send(String message, String messageType) kannst Du an einen bestimmten Client Daten senden.

UserData Stell' Dir vor, Du bekommst via onMessage(WebSocketClient sender, String message, String messageType) eine Nachricht von einem Client, z.B. die aktualisierten Koordinaten seiner Spielfigur. Dann muss das Programm anhand des WebSocketClient-Objekts sender das Sprite ermitteln, das zur Spielerfigur gehört. Damit das möglichst einfach geht, kann man an jedes WebSocketClient-Objekt Daten anhängen:

  • setUserData(String schlüssel, Object wert) speichert das Objekt Wert (es kann zu einer beliebigen Klasse gehören!) unter dem angegebenen Schlüssel (er kann beliebig gesetzt werden) im WebSocketClient-Objekt.
  • Object getUserData(String schlüssel) liefert das zuvor unter dem angegebenen Schlüssel gespeicherte Objekt zurück.
void onOtherClientConnected(WebSocketClient otherClient){
   Sprite s = new Sprite(100, 100, SpriteLibrary.ship_1, 0);
   otherClient.setUserData("Sprite", s);
}
 
void onMessage(WebSocketClient sender, String message, String messageType){
   Sprite s = (Sprite)sender.getUserData("Sprite");
   // s zeigt auf das zuvor gespeicherte Sprite. Jetzt kann - abhängig von den in message übermittelten Daten - z.B. seine Position gesetzt werden.
}
api/documentation/netzwerk/websocket.txt · Zuletzt geändert: 2024/08/31 12:03 von 127.0.0.1