From 8f97866dfb5303eca7e7344db8e377a60a481d1f Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 25 Oct 2021 11:37:04 +0200 Subject: feat(web): application-level pings --- .../language/web/xtext/server/PongResult.java | 44 ++++++++++++++++++++++ .../web/xtext/server/TransactionExecutor.java | 5 +++ .../web/xtext/servlet/XtextWebSocketServlet.java | 2 +- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 language-web/src/main/java/tools/refinery/language/web/xtext/server/PongResult.java (limited to 'language-web/src/main/java/tools') diff --git a/language-web/src/main/java/tools/refinery/language/web/xtext/server/PongResult.java b/language-web/src/main/java/tools/refinery/language/web/xtext/server/PongResult.java new file mode 100644 index 00000000..fe510f51 --- /dev/null +++ b/language-web/src/main/java/tools/refinery/language/web/xtext/server/PongResult.java @@ -0,0 +1,44 @@ +package tools.refinery.language.web.xtext.server; + +import java.util.Objects; + +import org.eclipse.xtext.web.server.IServiceResult; + +public class PongResult implements IServiceResult { + private String pong; + + public PongResult(String pong) { + super(); + this.pong = pong; + } + + public String getPong() { + return pong; + } + + public void setPong(String pong) { + this.pong = pong; + } + + @Override + public int hashCode() { + return Objects.hash(pong); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PongResult other = (PongResult) obj; + return Objects.equals(pong, other.pong); + } + + @Override + public String toString() { + return "PongResult [pong=" + pong + "]"; + } +} diff --git a/language-web/src/main/java/tools/refinery/language/web/xtext/server/TransactionExecutor.java b/language-web/src/main/java/tools/refinery/language/web/xtext/server/TransactionExecutor.java index f2f26d98..335f0636 100644 --- a/language-web/src/main/java/tools/refinery/language/web/xtext/server/TransactionExecutor.java +++ b/language-web/src/main/java/tools/refinery/language/web/xtext/server/TransactionExecutor.java @@ -46,6 +46,11 @@ public class TransactionExecutor implements IDisposable, PrecomputationListener public void handleRequest(XtextWebRequest request) throws ResponseHandlerException { var serviceContext = new SimpleServiceContext(session, request.getRequestData()); + var ping = serviceContext.getParameter("ping"); + if (ping != null) { + responseHandler.onResponse(new XtextWebOkResponse(request, new PongResult(ping))); + return; + } try { var injector = getInjector(serviceContext); var serviceDispatcher = injector.getInstance(XtextServiceDispatcher.class); diff --git a/language-web/src/main/java/tools/refinery/language/web/xtext/servlet/XtextWebSocketServlet.java b/language-web/src/main/java/tools/refinery/language/web/xtext/servlet/XtextWebSocketServlet.java index 6d4d2cad..942ca380 100644 --- a/language-web/src/main/java/tools/refinery/language/web/xtext/servlet/XtextWebSocketServlet.java +++ b/language-web/src/main/java/tools/refinery/language/web/xtext/servlet/XtextWebSocketServlet.java @@ -31,7 +31,7 @@ public abstract class XtextWebSocketServlet extends JettyWebSocketServlet implem */ private static final long MAX_FRAME_SIZE = 4L * 1024L * 1024L; - private static final Duration IDLE_TIMEOUT = Duration.ofMinutes(10); + private static final Duration IDLE_TIMEOUT = Duration.ofSeconds(30); private transient Logger log = LoggerFactory.getLogger(getClass()); -- cgit v1.2.3-70-g09d2