89 lines
2.5 KiB
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());
|
|
}
|
|
}
|