Skip to content

Networking Tutorial Server

Jan Reich edited this page Dec 31, 2018 · 1 revision

Einen Server aufsetzen

Im Package Networking befinden sich 4 Klassen um einen Server aufzusetzen benötigt man die abstrakte Server-Klasse. Der Server ist in der Lage an alle Client, an eine bestimmte Gruppe von Clients oder auch an nur einen spezifischen Client ein Datenpaket zu senden. Wie dieses Datenpaket genau aufgebaut ist wird in diesem Tutorial im späteren auch noch erläutert.

Ein einfache Server

public class SimpleServer extends Server {

    public SimpleServer(int port, boolean logging) {
        
        super(port, logging);
    }

    @Override
    public void registerDatapackageIDs() {
        
        //In dieser Methode müssen die verschiedenen befehle, die der Server empfangen kann registriert werden!
            registerMethod("exampleMessage", new Executable() {
            
                @Override
                public void run(Datapackage pack, Socket socket) {
            
                    //Die Run-Methode wird jedes Mal ausgeführt, wenn der Server ein Datenpaket mit der Kennung 
                    //"exampleMessage" erhält. 
            }
        });
    }

    @Override
    public void onServerStopped() {

        //Diese Methode wird aufgerufen, wenn der Server gestoppt wird. In dieser Methode kann dann beispielsweise die 
        //Graphische Darstellung oder sontige Serverrelevante Daten geupdatet werden.
    }

    @Override
    public void onClientRemoved(RemoteClient remoteClient) {

        //Diese Methode wird jedes Mal aufgerufen, wenn ein Client removt wird
    }

    @Override
    public void onClientRegistered(Datapackage msg, Socket socket) {

        //Diese Methode wird jedes Mal aufgerufen, wenn sich ein neuer Client beim Server anmeldet
    }

    @Override
    public void onMessageReceived(Datapackage msg, Socket socket) {

        //Diese Methode wird aufgerufen, wenn der Server ein Datenpaket Empfängt. (Die Kennungen die man registriert  
        //hat, werden aber trotzdem ausgeführt. Diese Methode ist nur optinal!
    }
}

Mögliche Konstruktoren

port - Der Port auf dem der Serve erstellt werden soll
logging - Ob die Einzelheiten des Servers in den Logs gespeichert werden sollen
autoRegister - Dieser Parameter bestimmt, ob jeder Client der sich mit dem Server verbindet automatisch gespeichert werden soll.
keepConnectionAlive - Dieser Parameter bestimmt, ob in einem bestimmten Intervall ein Ping-Signal gesendet werden soll. Das Intervall kann mit setPingInterval(int seconds) geändert werden.
minPlayer - Wenn die Min Player erreicht sind wird ein Datenpaket mit der Kennung "MinPlayerReached" und der Anzahl der Spieler gesendet
maxPlayer - Wenn ein Player limit angegeben wird und dieses erreeicht wird, wird die Verbindung von einem Client der sich verbinden möchte wieder getrennt
public Server(int port, boolean logging)

public Server(int port, boolean autoRegister, boolean keepConnectionAlive, boolean logging)

public Server(int port, boolean autoRegister, boolean keepConnectionAlive, boolean logging, int minPlayer, int maxPlayer)

Methoden zum senden eines Datenpakets

Die Aufgabe der verschiedenen sendMessage Methoden sind für das Senden von Nachrichten an verschiedene Clients da. Zum einen muss der Client in einer Form angegeben werden und zum anderen der Inhalt, der an den/die Client/s gesendet werden soll.

Die sendReply Methode sendet eine Antwort an den Client, von dem das letzte Datenpaket gesendet worden ist.

Die broadcastMessage Methoden sendet entweder an alle Clients oder an eine bestimmte Gruppe von Clients ein Datenpaket, dass dann von diesen ausgewertet werden kann.

public synchronized void sendReply(Socket toSocket, Object... datapackageContent) 

public synchronized void sendMessage(String remoteClientId, Datapackage message) 

public synchronized void sendMessage(RemoteClient remoteClient, Datapackage message)

public synchronized void sendMessage(String remoteClientId, String datapackageId, Object... datapackageContent)  

public synchronized void sendMessage(RemoteClient remoteClient, String datapackageId, Object... datapackageContent) 

public synchronized int broadcastMessage(Datapackage message);

public synchronized int broadcastMessageToGroup(String group, Datapackage message)

Clone this wiki locally