package com.github.czyzby; import java.util.concurrent.atomic.AtomicInteger; import com.github.czyzby.shared.MyJsonMessage; import com.github.czyzby.websocket.serialization.Serializer; import com.github.czyzby.websocket.serialization.impl.JsonSerializer; import io.vertx.core.Vertx; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpServer; import io.vertx.core.http.ServerWebSocket; import io.vertx.core.http.WebSocketFrame; // Note that server web socket implementation is not provided by gdx-websocket. This class uses an external library: Vert.x. public class ServerLauncher { private final Vertx vertx = Vertx.vertx(); private final AtomicInteger idCounter = new AtomicInteger(); private final Serializer serializer = new JsonSerializer(); // If you uncommented BASE64 serializer in the client, use this serializer instead: // private final Serializer serializer = new Base64Serializer(new JsonSerializer()); public static void main(final String... args) throws Exception { new ServerLauncher().launch(); } private void launch() { System.out.println("Launching web socket server..."); final HttpServer server = vertx.createHttpServer(); server.websocketHandler(webSocket -> { // Printing received packets to console, sending response: webSocket.frameHandler(frame -> handleFrame(webSocket, frame)); // Closing the socket in 5 seconds: vertx.setTimer(5000L, id -> webSocket.close()); }).listen(8000); } private void handleFrame(final ServerWebSocket webSocket, final WebSocketFrame frame) { // Deserializing received message: final Object request = serializer.deserialize(frame.binaryData().getBytes()); if (request instanceof MyJsonMessage) { System.out.println("Received message: " + ((MyJsonMessage) request).text); } // Sending a simple response message after 1 second: final MyJsonMessage response = new MyJsonMessage(); response.id = idCounter.getAndIncrement(); response.text = "Hello client "; vertx.setTimer(1000L, id -> webSocket.writeFinalBinaryFrame(Buffer.buffer(serializer.serialize(response)))); } }