package live.connector.vertxui.samples.server.chatSockjs; import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import io.vertx.core.AbstractVerticle; import io.vertx.core.Vertx; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.sockjs.SockJSHandler; import live.connector.vertxui.samples.client.Dto; import live.connector.vertxui.samples.client.chatSockjs.Client; import live.connector.vertxui.samples.server.AllExamplesServer; import live.connector.vertxui.server.transport.Pojofy; public class ExampleChatSockjs extends AbstractVerticle { private final static Logger log = Logger.getLogger(MethodHandles.lookup().lookupClass().getName()); public static void main(String[] args) { Vertx.vertx().deployVerticle(MethodHandles.lookup().lookupClass().getName()); } @Override public void start() { // Chat with SockJS Router router = Router.router(vertx); List<String> ids = new ArrayList<>(); router.route(Client.url + "/*").handler(SockJSHandler.create(vertx).socketHandler(socket -> { final String id = socket.writeHandlerID(); ids.add(id); // entering socket.endHandler(data -> { ids.remove(id); // leaving }); socket.handler(buffer -> { // receiving // extra: pojo example if (Pojofy.socket(socket, Client.urlPojo, buffer, Dto.class, this::serviceDoSomething)) { return; } ids.forEach(i -> vertx.eventBus().send(i, buffer)); // broadcasting // to reply to one: socket.write() }); })); AllExamplesServer.start(Client.class, router); } public Dto serviceDoSomething(Dto received, JsonObject headers) { log.info("Extra example: received a dto with action=" + headers.getString("action") + " and color=" + received.color); return new Dto("brown"); } }