Server/Server/src/main/java/uulm/teamname/marvelous/server/net/MarvelousServer.java

89 lines
2.5 KiB
Java

package uulm.teamname.marvelous.server.net;
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import org.tinylog.Logger;
import uulm.teamname.marvelous.gamelibrary.json.JSON;
import uulm.teamname.marvelous.server.ServerApplication;
import java.net.InetSocketAddress;
import java.util.HashMap;
public class MarvelousServer extends WebSocketServer {
public static final JSON json;
//static initializers are executed the first time the class is referenced
static {
json = new JSON(ServerApplication.getCharacterConfig());
}
public MarvelousServer(InetSocketAddress address) {
super(address);
Thread.currentThread().setName("WebSocketServer");
}
/** A map of all connected clients. */
private final HashMap<WebSocket, Client> clients = new HashMap<>();
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
Logger.debug("Connected new user");
Client client = new Client(conn);
synchronized(clients) {
clients.put(conn, client);
}
Logger.trace("Queueing event...");
ServerApplication.getSession().addEvent(new SocketEvent(SocketEventType.Connect, client));
}
@Override
public void onMessage(WebSocket conn, String message) {
Logger.debug("Message received from {}", conn);
Client client = clients.get(conn);
if(client == null) {
return;
}
if(message.length() == 0) {
return;
}
Logger.trace("Queueing event...");
ServerApplication.getSession().addEvent(new SocketEvent(SocketEventType.Message, client, message));
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
Logger.info("Disconnecting client '{}'", conn);
Client client = clients.get(conn);
if(client == null) {
return;
}
Logger.trace("Queueing event...");
ServerApplication.getSession().addEvent(new SocketEvent(SocketEventType.Disconnect, client));
synchronized(clients) {
clients.remove(conn);
}
}
@Override
public void onStart() {
Logger.info("MarvelousServer started on address {}", this.getAddress().toString());
}
@Override
public void onError(WebSocket conn, Exception ex) {
Logger.warn("WebSocket-Error occurred: {}", ex.getMessage());
}
}